C 中的子串提取和分段错误
Substring extraction in C and segmentation fault
我有一个这样的字符串: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)) = '[=11=]';
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;
}
我的问题是此代码在处理提取 "number part" 后剩余的子字符串时生成分段错误。如果我不在字符串中放入数字,并且很明显,我不调用函数来提取它,那么一切都会顺利进行。我不知道出了什么问题,你能帮我找出错误吗?
您正在使用局部变量:
(*(dest + length)) = '[=10=]';
必须
(*(*dest + length)) = '[=11=]';
我有一个这样的字符串: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)) = '[=11=]';
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;
}
我的问题是此代码在处理提取 "number part" 后剩余的子字符串时生成分段错误。如果我不在字符串中放入数字,并且很明显,我不调用函数来提取它,那么一切都会顺利进行。我不知道出了什么问题,你能帮我找出错误吗?
您正在使用局部变量:
(*(dest + length)) = '[=10=]';
必须
(*(*dest + length)) = '[=11=]';