0

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

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';
4

3 回答 3

2

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

在使用它之前初始化你的command数组。例如与memset.

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

于 2012-10-17T07:16:31.903 回答
1

你有问题tokens。您正在递增j,并且k在每次迭代中都没有任何检查。

无论如何,你知道已经存在可以做你想做的事情的功能吗?

于 2012-10-17T07:22:21.133 回答
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);
}

希望能帮助到你。;)

于 2012-10-17T08:01:39.170 回答