请告诉我为什么这段代码给我分段错误?
我想将命令分成令牌,但我不知道为什么它会给我分段错误!!
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';
答案 0 :(得分:2)
command
未初始化。这意味着strlen(command)
调用可能超过500字节,导致分段错误。
在使用之前初始化您的command
数组。例如memset
。
除此之外,没有任何边界检查和一些任意数组长度。这肯定会失败。
答案 1 :(得分:1)
tokens
出现问题。您在每次迭代中递增j
和k
而不进行任何检查。
无论如何,你知道你们已经存在了能够做你想做的事情吗?
答案 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);
}
希望它有所帮助。 ;)