分解字符串并将其存储在数组中

Ada*_*mou 8 c cstring strtok

我想分解一个句子并将每个字符串存储在一个数组中.这是我的代码:

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

int main(void)
{
    int i = 0;
    char* strArray[40];
    char* writablestring= "The C Programming Language";
    char *token = strtok(writablestring, " ");


    while(token != NULL)
    {
        strcpy(strArray[i], token);
        printf("[%s]\n", token);
        token = strtok(NULL, " ");
        i++;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它一直给我分段错误,我无法弄明白.我相信当我将令牌复制到我的阵列时,它有一些事情要做.

cni*_*tar 13

这是因为writablestring根本不可写.尝试写入字符串文字是未定义的行为并strtok写入它(这是正确的,strtok修改其参数).

要使其工作,请尝试:

char writablestring[] = "The C Programming Language";
Run Code Online (Sandbox Code Playgroud)

还有一个C FAQ.

另一个问题是你没有为你的字符指针数组分配内存(所以那些指针指向什么都没有).

char* strArray[40]; /* Array of 40 char pointers, pointing to nothing. */
Run Code Online (Sandbox Code Playgroud)

也许试试这个?

/* Careful, strdup is nonstandard. */
strArray[i] = strdup(token);

/* Or this. */
strArray[i] = malloc(strlen(token) + 1);
strcpy(strArray[i], token);
Run Code Online (Sandbox Code Playgroud)