我在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;
}
答案 0 :(得分:1)
strtok()写入字符串,因此您不能使用字符串文字作为参数。有问题的一行就是这个:
char* string = "string1 string2 string3";
可能的解决方法是将字符串从指针更改为数组:
char string[] = "string1 string2 string3";
gcc编译器选项-Wwrite-strings警告这类问题。
请注意,此警告已从gcc的选项-Wdiscarded-qualifiers中删除,并且不会被例如-Wall -Wextra -std = c99 -pedantic。