когато тествах поведението на двоен показалец, получих резултат, който не разбирам добре.
==> код 1:
int main (int argc , char **argv)
{
if(*argv+1 ==NULL)
{
printf("NULL pointer \n");
exit(0) ;
}
else
{
printf("test double pointer[] : %s \n ",*argv+1);
}
return(0);
}
====> резултат 1
root@root:/home/aa/test# ./geip 1255
test double pointer[] : /geip
root@root:/home/aa/test#
===> код 2:
int main (int argc , char **argv)
{
if(*argv+9 ==NULL)
{
printf("NULL pointer \n");
exit(0) ;
}
else
{
printf("test double pointer[] : %s \n ",*argv+9);
}
return(0);
}
==> резултат 2:
root@root:/home/aa/test# ./geip 1255
test double pointer[] : 55
root@root:/home/aa/test#
==> резултат 3:
root@root:/home/aa/test# ./geip
test double pointer[] : ELL=/bin/bash
root@root:/home/aa/test#
изглежда, че printf показва от n-та дума (1 и 9) как можем да обясним това поведение на показалеца?
argv[0]
е по-къс от 9 байта,*argv + 9
, което е еквивалентно на&argv[0][9]
, извиква недефинирано поведение. Случва се да не се срине (в твоя случай) и каквото се съхранява там се отпечатва. - person Daniel Fischer   schedule 12.07.2013