sta*_*k_A 0 c linux pointers argv
当我测试双指针行为时,我得到了一个我不太了解的结果.
==>代码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);
}
Run Code Online (Sandbox Code Playgroud)
====>结果1
root@root:/home/aa/test# ./geip 1255
test double pointer[] : /geip
root@root:/home/aa/test#
Run Code Online (Sandbox Code Playgroud)
===>代码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);
}
Run Code Online (Sandbox Code Playgroud)
==>结果2:
root@root:/home/aa/test# ./geip 1255
test double pointer[] : 55
root@root:/home/aa/test#
Run Code Online (Sandbox Code Playgroud)
==>结果3:
root@root:/home/aa/test# ./geip
test double pointer[] : ELL=/bin/bash
root@root:/home/aa/test#
Run Code Online (Sandbox Code Playgroud)
似乎printf从第n个字(1和9)显示我们如何解释指针的这种行为?
Tom*_*rdt 10
你错了.
*argv+1将被解释为(argv[0])+1,因为argv[0]"./geip"你得到"/ geip".
*argv+9将被解释为(argv[0])+9但由于argv[0]只有长度为6,结果是不确定的.
在您的情况下,argv可能存储为:
. / g e i p \0 1 2 5 5 \0
0 1 2 3 4 5 6 7 8 9 10 11
Run Code Online (Sandbox Code Playgroud)
这解释了为什么+9让你"55"
但是你应该忘记它,因为它永远不会有用!这是未定义的行为,不应该使用.
| 归档时间: |
|
| 查看次数: |
948 次 |
| 最近记录: |