C - 将字符串拆分为多个部分

时间:2016-10-22 15:46:13

标签: c string

我在C中拆分字符串时遇到问题。每当我尝试执行代码时,都会出现“分段错误”错误。但我不太清楚问题是什么。

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

char** string_array = NULL; //string array for the split method

    static int split_string(char* string, char* delimiter)
    {
        char* part = strtok(string, delimiter);//string which is getting split out by strtok
        int number_of_parts = 0;//number of strings

        /*split string into multiple parts*/
        while(part)
        {
            string_array = realloc(string_array, sizeof(char*)* ++number_of_parts);

            if(string_array == NULL)//allocation failed
                return -1;

            string_array[number_of_parts-1] = part;
            part = strtok(NULL, delimiter);
        }

        /*write final null into string_array*/
        string_array = realloc(string_array, sizeof(char*)* (number_of_parts+1));
        string_array[number_of_parts] = 0;

        return 0;
    }


int main()
{
    char* string = "string1 string2 string3";
    printf("%d", split_string(string, " "));
    return 0;
}

1 个答案:

答案 0 :(得分:1)

strtok()写入字符串,因此您不能使用字符串文字作为参数。有问题的一行就是这个:

char* string = "string1 string2 string3";

可能的解决方法是将字符串从指针更改为数组:

char string[] = "string1 string2 string3";

gcc编译器选项-Wwrite-strings警告这类问题。

请注意,此警告已从gcc的选项-Wdiscarded-qualifiers中删除,并且不会被例如-Wall -Wextra -std = c99 -pedantic。