我试图制作一个能从用户那里收到char *
的功能并打印出来。
当我打印它时,它将我的价值变成了一种奇怪的东西。
**//input method**
char* readContactName(){
char tmp[20];
do{
printf("What is your contact name?: (max %d chars) ", MAX_LENGH);
fflush(stdin);
scanf("%s", &tmp);
} while (!strcmp(tmp, ""));
return tmp;
}
void readContact (Contact* contact)
{
char* tmp;
tmp = readContactName();
updateContactName(contact, tmp);
}
**//when entering this function the string is correct**
void updateContactName(Contact* contact, char str[MAX_LENGH])
{
printf("contact name is %s\n",&str); --> prints rubish
}
我在这里想念的是什么?
答案 0 :(得分:4)
在您的代码中,char tmp[20];
是函数readContactName()
的本地代码。函数完成执行后,就不存在tmp
。因此,tmp
的地址也会失效。
因此,在return
之后,在调用方中,如果您尝试使用return
ed指针,(就像您在updateContactName(contact, tmp);()
中所做的那样 )它会调用undefined behaviour。
FWIW,fflush(stdin);
也是UB。 fflush()
仅为输出流定义。
解决方案: