boşlukla komuttan sonraki argümanları alıyorum echo selam kısmındaki echodan sonraki selam gibiNeden önce boşluk, sonra ; ile parçaladınız ki girilen metni? Sadece ";" yaptığınızda dönen değerler ne oluyor?
boşlukla komuttan sonraki argümanları alıyorum echo selam kısmındaki echodan sonraki selam gibi
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void chop_str(char* str){
while(*str){
if(*str == ';'){
*str = '\n';
}
str++;
}
}
int main(int argc, char** argv){
if(argc > 1){
chop_str(argv[argc-1]);
printf("%s\n",argv[argc-1]);
}
else{ //O zaman girdiyi stdin'den al.
char str[156];
scanf("%s",&str);
chop_str(str);
printf("%s\n",str);
}
}
Örnek bir program. Kodu anlamak çok da zor değil.
C:#include <stdio.h> #include <stdlib.h> #include <string.h> void chop_str(char* str){ while(*str){ if(*str == ';'){ *str = '\n'; } str++; } } int main(int argc, char** argv){ if(argc > 1){ chop_str(argv[argc-1]); printf("%s\n",argv[argc-1]); } else{ //O zaman girdiyi stdin'den al. char str[156]; scanf("%s",&str); chop_str(str); printf("%s\n",str); } }
Düzgün çalışmıyor.
chop_str fonksyonunu döngüye koyup bütün argümanları göndermen gerekiyor.
Çünkü scanf() arıza çıkartıyor. Halledeyim.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void chop_str(char* str){
while(*str){
if(*str == ';'){
*str = '\n';
}
str++;
}
}
int main(int argc, char** argv){
if(argc > 1){
chop_str(argv[argc-1]);
printf("%s\n",argv[argc-1]);
}
else{ //O zaman girdiyi stdin'den al.
char str[65535];
gets(&str);
chop_str(str);
printf("%s\n",str);
}
}
rica etsem şu kodada bakar mısın?Çünkü scanf() arıza çıkartıyor. Halledeyim.
İnternetim çok yavaş olduğu için iki saattir mesaj yollamaya çalışıyorum.
Düzenleme: chop_str() fonksiyonuna yukarıdaki kodu koydum, pointer aritmetiğine alışman açısından daha iyi olur.C:#include <stdio.h> #include <stdlib.h> #include <string.h> void chop_str(char* str){ while(*str){ if(*str == ';'){ *str = '\n'; } str++; } } int main(int argc, char** argv){ if(argc > 1){ chop_str(argv[argc-1]); printf("%s\n",argv[argc-1]); } else{ //O zaman girdiyi stdin'den al. char str[65535]; gets(&str); chop_str(str); printf("%s\n",str); } }
"token" değişkeninden operatör gibi şeyleri çıkartıyor ve run_command() ile çalıştırıyor.[CODE lang="c" title="Kod"] char *token = strtok(shell_buffer, ";");
while( token != '\0' ) {
char *comm = strtok(token, " ");
strtok(token, comm);
run_command(token);
token = strtok('\0', ";");
}
[/CODE]
bu kodda hata şu;"token" değişkeninden operatör gibi şeyleri çıkartıyor ve run_command() ile çalıştırıyor.
strtok a ikinci parametre olarak 0 gönderirsen aynı ayırmaya devam eder.bu kodda hata şu;
char *comm = strtok(token, " ");
strtok(token, comm);
olunca sadece ilk komutu alıyor ; den sonrasını almıyor fakat hata vermiyor
olmayınca ise argümanları almıyor ama ; den sonrasını alıp ne kadar komut varsa çalıştırıyor.
Bunu düzeltebilir misin zahmet olmaz ise?
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.