1
我有一個字符串是這樣的: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;
}
,我調用這個函數從主這樣的:
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;
}
我的問題是這段代碼在處理提取「數字部分」後剩餘的子字符串時會生成段錯誤。如果我沒有在字符串中輸入數字,顯然,我沒有調用函數來提取它,但一切都運行平穩。我無法弄清楚什麼是錯誤的,你能幫我抓住錯誤嗎?
這裏看看http://stackoverflow.com/questions/266357/tokenizing-strings-in-c –
注意'*(dest + length)'與'dest [length]'完全一樣。 – fuz