分解字符串并将其存储在数组中[英] Breaking down string and storing it in array

本文是小编为大家收集整理的关于分解字符串并将其存储在数组中的处理方法,想解了分解字符串并将其存储在数组中的问题怎么解决?分解字符串并将其存储在数组中问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

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

它不断给我分段错误,我无法弄清楚.我相信当我将令牌复制到我的数组时,它有事.

推荐答案

这是因为writablestring根本不是写作.试图写入字符串的文字是不确定的行为, strtok写信给它(没错,strtok修改其参数).

要使它起作用,请尝试:

char writablestring[] = "The C Programming Language";

还有一个 C FAQ .

另一个问题是您没有为角色指针数组分配内存(这些指针都没有指向).

char* strArray[40]; /* Array of 40 char pointers, pointing to nothing. */

也许尝试一下?

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

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

其他推荐答案

请看一下 docs :

char * strtok ( char * str, const char * delimiters );

...哪里...

str - c字符串截断.该字符串的内容被修改并分解为较小的字符串(令牌). 可以指定备用指针,在这种情况下,函数继续进行扫描,而先前成功调用该函数的呼叫结束.

定界器 - 包含定界器的c字符串. 这些可能从一个呼叫到另一个电话不等.

返回值 - 指向字符串中最后一个令牌的指针. 如果没有令牌可以检索,则将返回空指针.

您需要第一个字符串才能修改我,您需要为输出分配内存,例如

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

    for( int j = 0; j < numOfStrings; j++ )
    {
        strArray[j] = new char[40];
    }

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

本文地址:https://www.itbaoku.cn/post/359328.html