我有这样一个字符串:word1;word2;42;word3-
我需要提取除以分隔符的单词并将它们存储在具有以下结构的结构中:
typedef struct Info {
char *info_one;
char *info_two;
char *info_three;
int number;
} Info;
为了得到单词我写了这个函数:
char *get_words(char *source, char **dest, const char separator)
{
int length;
char *substring;
substring = strchr(source, separator);
length = strlen(source) - strlen(substring);
(*dest) = (char *) malloc ((length+1) * sizeof(char));
strncpy(*dest, source, length);
(*(dest + length)) = '\0';
return substring+1;
}
我从 main 中调用这个函数是这样的:
int main(int argc, char *argv[]) {
Info *info;
char *number;
char *substring;
char *stringinfo = "dog;cat;12;elephant-";
info = (Info *) malloc (sizeof(Info));
substring = stringinfo;
substring = get_words(substring, &info->info_one, ';');
substring = get_words(substring, &info->info_two, ';');
// --------
substring = get_words(substring, &number, ';');
info->number = atoi(number);
// --------
substring = get_words(substring, &info->info_three, '-');
return 0;
}
我的问题是此代码在处理提取“数字部分”后剩余的子字符串时生成段错误。如果我不在字符串中放入数字,并且很明显,我不调用函数来提取它,那么一切都会顺利进行。我不知道出了什么问题,你能帮我找出错误吗?
最佳答案
您正在使用局部变量:
(*(dest + length)) = '\0';
必须是
(*(*dest + length)) = '\0';
关于c - C 中的子串提取和段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28740488/