【发布时间】:2013-07-12 22:44:17
【问题描述】:
当我测试双指针行为时,我得到了一个我不太理解的结果。
==> 代码 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]调用未定义的行为。它碰巧不会崩溃(在您的情况下),并且存储在那里的任何内容都会被打印出来。 -
这段代码太破了,眼睛疼。
-
这只是一个说明,但以 root 用户身份工作存在潜在危险。
-
这将进一步帮助您:Two Dimensional Array Implementation Using Double Pointer 特别是Mohamed 给出的图表