Это вопрос практики экзамена, который я имею некоторые трудности с:Практика экзамена Вопросы
struct bodytp // Is there an error?
{
char *name; // If so, fix the error.
int len;
};
main()
{
struct bodytp person;
keepname(&person , "Waterman");
printf("%s\n", person.name);
}
void keepname(struct bodytp *onept, const char *last)
{
int len;
char *tpt;
for (len = 0; last[len] != '\0';)
len++;
char name[len+1];
for (tpt = name; *tpt++ = *last++;)
;
onept->name = name;
onept->len = len;
}
я определил, что есть ошибка, а когда я запускаю его, я получаю кучу мусора от Printf. Я также определил, что person
name
действительно «Waterman» после вызова функции keepname. Я попытался разыменовать person.name
до person -> name
, изменив проблему из вопроса на основе стека на вопрос, основанный на куче, исключив оператор амперсанда и построив структуру, но ничего не получилось. Может ли кто-нибудь направить меня в правильном направлении? Заранее спасибо.
'onept-> name = name;' здесь вы назначаете адрес локальной переменной, чье время жизни завершено после вызова функции. –
Если он отвечает, это должен быть ответ @BlueMoon :) – Yann
len на самом деле не проблема, поскольку он инициализирован в цикле ... – tomsoft