C在函数之间传递字符串

时间:2017-02-18 12:44:56

标签: c string parameter-passing

我在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
  .
  .
  .
}

问题是:在第一个函数中,我得到了正确的用户字符串输入,但当我将它传递给第三个函数时,我得到了一些垃圾。如何解决?

2 个答案:

答案 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;
}