0

次のコードでは:

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

int main (int argc, const char * argv[]) {

    char input[20];
    fgets(input, sizeof(input), stdin);
    char * pch;
    pch = strtok(input, " ");
    int i = 0;
    int nums[3];
    while (pch != NULL)
    {
        printf ("%s\n",pch);
        pch = strtok(NULL, " ");
        //nums[i] = atoi(pch);
        i++;
    }


    return 0;
}

の入力

1 2 3

与えます:

1
2
3

コメント行のコメントを外すと、次のようになります。

1
2
3

Segmentation fault: 11

この1行でセグフォルトが発生するのはなぜですか?

4

6 に答える 6

1

strtok の戻り値を確認し (トークンがない場合は NULL を返す)、i を確認する必要があります。これは、この var が 3 まで上昇してはならないためです。これは、nums 配列が 3 つの int にのみ割り当てられるためです。

while (pch != NULL && i < 3)
    {
        printf ("%s\n",pch);
        pch = strtok(NULL, " ");
        if (pch != NULL)
          nums[i] = atoi(pch);
        i++;
    }
于 2013-05-23T07:50:52.713 に答える