我在C中编写简单的程序并且被卡住了。我有三个功能:
void changeStatusOfBook(User users[], Book books[]) {
char *id= askForBookID();
Book book = getBookById(books, id);
.
.
.
}
char * askForBookID() {
char id[6];
printf("Tell me which book (ID)\n");
scanf_s("%5s",id, 6);
return id;
}
Book getBookById(Book books[], char bookID[]) {
int counter = 0;
//bookID becomes a trash here
.
.
.
}
问题是:在第一个函数中,我得到了正确的用户字符串输入,但当我将它传递给第三个函数时,我得到了一些垃圾。如何解决?
答案 0 :(得分:3)
函数askForBookID返回具有自动存储持续时间的数组的第一个元素的地址。
在调用函数时使用该指针的行为是未定义的。
改用malloc。
答案 1 :(得分:3)
你不能从函数返回局部变量char id[]
。它的内存在堆栈上,当函数返回该函数的所有堆栈内存时,它的局部变量不再可访问。
当堆栈上需要另一个程序的内存时,它会覆盖char id
的内存空间,这对你的程序来说就成了一个问题。
char * askForBookID() {
//char id[6];
char *id = malloc(sizeof(char)*6);
if(!id){ //check if malloc got some memory for id
printf("Sorry not enough memory"); return NULL;
}
printf("Tell me which book (ID)\n");
scanf_s("%5s",id, 6);
return id;
}