2012-10-17 47 views
0

請告訴我爲什麼這段代碼給我分段錯誤?
我想分割命令到令牌,但我不知道爲什麼它給我分段錯誤!c字符數組的段錯誤

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'; 
+2

將字符串拆分爲標記是'strtok'存在的完整目的。 – chris

+5

'command'是未初始化的,除非該代碼已被省略? – hmjd

+2

它爲我運行沒有segfaulting。 – wallyk

回答

2

command未初始化。這意味着strlen(command)調用可能會超出500字節,導致分段錯誤。

在使用之前初始化您的command陣列。例如memset

除此之外,沒有任何限制和任意數組長度檢查。這肯定會失敗。

+0

我初始化了命令,但它給了我分段錯誤 –

+2

它在哪裏segfault?您可以使用調試器來查明。 –

+0

+1'這肯定會失敗' –

1

您在tokens時遇到問題。您在每次迭代中都會增加jk,而不進行任何檢查。

不管怎麼說,你知道那裏已經有功能可以做你想做的事嗎?

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); 
} 

希望它能幫助。 ;)