C中定义指针数组

时间:2015-04-13 14:38:11

标签: c pointers

我想问一下在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或更高),它仍能正常工作?

感谢阅读!

2 个答案:

答案 0 :(得分:3)

使用数组的无效索引将导致Undefined Behavior,这意味着任何事情都可能发生。它不一定像预期的那样“工作”,或者使程序崩溃或格式化硬盘。 任何事情都可能发生

答案 1 :(得分:3)

有时情况是,当您离开数组区域时,实际上是在改变一些不愉快的邻居变量或某些返回地址。 (在你的例子中,你可能正在摧毁&#34;字符串&#34;使用后。)

在这种情况下&#34;运作良好&#34;比分段错误要差得多。

错误,变量发生变化,稍后会出现,一些不可预测的随机行为总是在最糟糕的时刻,( similar situations, were detected in some very big disasters