Zastanawiam się, czy parametry linii poleceń są zawsze zakończone wartością NUL? Google wydaje się mówić "tak", a kompilacja na GCC wskazuje, że tak jest, ale czy mogę zagwarantować, że to zawsze będzie prawda?Czy char * argumenty argv [] w głównej null są zakończone?
int main(int argc, char** argv)
{
char *p;
for(int cnt=1; cnt < argc; ++cnt)
{
p = argv[cnt];
printf("%d = [%s]\n", cnt, p);
}
return 0;
}
$ MyProgram -arg1 -arg2 -arg3
1 = -arg1
2 = -arg2
3 = -arg3
Tak, to prawda. – kol
Pomyśl przez chwilę: * co by się stało, gdyby nie zakończyły się one NULL? * –
Myślenie przez chwilę ... char [] i char * nie implikuje automatycznie ciągu w stylu C. Oczywiście cały łańcuch wiersza polecenia ma wartość NULL zakończoną, ale nie musi być tłumaczona na każdą pojedynczą tablicę znaków przekazywanych w wierszu polecenia zakończonym NULL. Łatwo będzie argv, aby usunąć białe spacje z wiersza poleceń i mieć macierze znakowe zakończone znakiem Null, a nie ciągi w stylu C. – LeviX