c中char数组的分段错误

时间:2012-10-17 07:06:28

标签: c segmentation-fault runtime-error

请告诉我为什么这段代码给我分段错误?
我想将命令分成令牌,但我不知道为什么它会给我分段错误!!

char command[500]="asdadas asdasdas asdadas";   
int i,j,k;
char tokens[4][200];

for(i=0,j=0,k=0;  i<strlen(command);  i++)
{
    if(command[i]==' ') 
    {
        tokens[j][k]='\0';
        k=0;
        j++;
        continue;
    }

    tokens[j][k]=command[i];
    k++;
}
tokens[j][k]='\0';

3 个答案:

答案 0 :(得分:2)

command未初始化。这意味着strlen(command)调用可能超过500字节,导致分段错误。

在使用之前初始化您的command数组。例如memset

除此之外,没有任何边界检查和一些任意数组长度。这肯定会失败。

答案 1 :(得分:1)

tokens出现问题。您在每次迭代中递增jk而不进行任何检查。

无论如何,你知道你们已经存在了能够做你想做的事情吗?

答案 2 :(得分:0)

要向其他人添加更多答案,您可以使用strsep。请查看以下示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main ()
{
char * command=NULL, *tok=NULL;

command =strdup("asdadas asdasdas asdadas");
while ((tok = strsep(&command, " ")) != NULL )
{
  printf ("..%s..\n", tok);
}

希望它有所帮助。 ;)