Napisałem program do podzielenia łańcucha wejściowego za pomocą ";" jako terminator i wypisz część łańcucha, która jest po ";". Program pokazuje poprawne wyniki za każdym razem, gdy podąża po ";" w łańcuchu wejściowym nie jest poprawnym poleceniem terminalowym, ale drukuje także command not found
. Z drugiej strony, nie drukuje niczego, gdy podłańcuch poprzedzony jest przez ";" jest poprawnym poleceniem terminalowym i wykonuje podciąg jako polecenie, np. w przypadku wprowadzenia "sjhjh; ls" wykona polecenie ls. W jaki sposób pozbyć się części? Oto kod:The ';' znak na wejściu jest źle interpretowany
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char * input;
char * str;
char * word;
char terminator = ';';
if (argc < 2) {
fprintf(stderr,"ERROR, no string provided\n");
exit(1);
}
input = argv[1];
word = strchr(input, terminator);
if (word != NULL) printf("%s\n", word);
return 0;
}
Chłopaki, nie zgłaszajcie tego pytania. Jest to dość rzadki i interesujący przykład wzajemnego oddziaływania powłoki z aplikacją. – DyZ
sugeruje dodanie nazwy powłoki jako znacznika. –
@DYZ Nie odrzucę, ale jest to właściwie przykład nieużywania debuggera lub tworzenia MCVE. W przeciwnym razie byłoby jasne, że tekst nigdy nie osiąga "argv" w głównym, a pytanie może mieć zupełnie inny punkt widzenia. – grek40