我想问一下在C中定义指针数组。 在下面的代码中,我定义了两个指向char的指针,然后我将每个指针指定为从strtok函数返回。
#include<stdio.h>
#include<string.h>
main()
{
char *s[2], string[]="hehe hihi keke kaka huhu hixhix",delimit[]=" ";
int i=0;
s[i]=strtok(string,delimit);
while( s[i]!=NULL )
{
printf("i=%d -> %s \n",i,s[i]);
++i;
s[i]=strtok(NULL,delimit);
}
}
这是输出:
i=0 -> hehe
i=1 -> hihi
i=2 -> keke
i=3 -> kaka
i=4 -> huhu
i=5 -> hixhix
所以,我只定义了两个指针,但是当 i 大于1时代码运行没有错误。
为什么即使我只定义指针数量少于必要指针(例如:6或更高),它仍能正常工作?
感谢阅读!
答案 0 :(得分:3)
使用数组的无效索引将导致Undefined Behavior,这意味着任何事情都可能发生。它不一定像预期的那样“工作”,或者使程序崩溃或格式化硬盘。 任何事情都可能发生。
答案 1 :(得分:3)
有时情况是,当您离开数组区域时,实际上是在改变一些不愉快的邻居变量或某些返回地址。 (在你的例子中,你可能正在摧毁&#34;字符串&#34;使用后。)
在这种情况下&#34;运作良好&#34;比分段错误要差得多。
错误,变量发生变化,稍后会出现,一些不可预测的随机行为总是在最糟糕的时刻,( similar situations, were detected in some very big disasters )