我讓一個人一個人結構用typedef PERSON_T:字符串使用後變成垃圾免費()
int main(int argc, char* argv[]) {
person_t a;
memset(&a, 0, sizeof(person_t));
person_set_name(&a, "Konrad Hoppenstauffer");
person_set_age(&a, 42);
void person_set_name(person_t* person, char* name) {
if(person->name) {
free(person->name);
}
person->name = malloc(sizeof(char) * strlen(name) + 1);
strcpy(person->name, name);
}
上述工作就好了。
person_t* string_to_person(char* str) {
person_t* person = malloc(sizeof(person_t));
int len = 0;
while(str[len] != '\t') {
len++;
}
char* name = malloc(len + 1);
int i;
for(i = 0; i < len; i++) {
name[i] = str[i];
}
name[len] = '\0';
person_set_name(person, name);
person_set_age(person, atoi(str+len+1));
return person;
}
這裏str是這樣的: 「南旋名\ T22」 當我使用這個功能
問題發生。這是由tab分隔的名稱。然後我將兩者分開並將字符放在char *名稱中。
person_t是一個struct的typedef。
如果我從person_set_name中刪除了free(person-> name),那麼一切正常。但是如果我把它放進去,名字變成垃圾,例如:「É8>」。
我假設我在複製每個字符的for循環中發生了錯誤。但是憑藉我對C的有限經驗,我看不到什麼。幫助表示讚賞。
我不認爲這會導致你問的問題,但你檢查如果person-> name是NULL而沒有初始化結構,malloc不會爲你初始化它。 – MByD
我在說'string_to_person' – MByD
這個修正了它:memset(person,0,sizeof(person_t));謝謝 – prideHURTS