簡體   English   中英

c中的char數組的分割錯誤

[英]segmentation fault with char array in 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';

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

在使用之前初始化command數組。 例如與memset

除此之外,沒有邊界檢查任何東西和一些任意的數組長度。 這注定會失敗。

您對tokenstokens 您將在每次迭代中遞增jk而不進行任何檢查。

無論如何,您知道已經存在執行您想執行的功能的功能嗎?

要將“更多”添加到其他人的答案中,可以使用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);
}

希望能幫助到你。 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM