c - 使用相似代码时出现奇怪的编译器投诉

标签 c compiler-errors user-input

对于一个项目,我必须向用户询问文件名,我使用 getchar 逐个字符地读取它。

从 main 开始,我调用函数 char *coursename= introPrint();//开始打印使用说明并获取第一位输入。该函数定义为

char *introPrint(){
  int size= 20;
  int c;
  int length=0;
  char buffer[size];


  //instructions printout, cut for brevity

  //get coursename from user and return it
  while ( (c=getchar()) != EOF && (c != '\n') ){
    buffer[length++]= c;
    if (length==size-1)
      break;

  }
  buffer[length]=0;
  return buffer;
}

这与我编写的代码基本相同,要求用户输入,将字符 echo 替换为星号,然后打印出结果。不过,在这里,我收到了针对 return 语句的 function returns address of local variable 警告。那么,为什么我没有收到来自其他程序的警告,却触发了此代码的警告?

最佳答案

您正在返回 buffer 的地址,当它超出范围时(当函数返回时),它会被销毁。当您尝试使用返回的指针时,程序的行为是未定义的:程序可能会重新使用 buffer 实例先前所在的内存用于其他目的。

使用static 缓冲区,使用malloc 分配一个缓冲区或让调用者传入缓冲区。在最后一种情况下,函数及其调用者还需要以某种方式就缓冲区的长度进行通信(例如,通过一个额外的参数 size)。

关于c - 使用相似代码时出现奇怪的编译器投诉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5369631/

相关文章:

c - C语言中如何正确使用指针

c++ - 尝试编译我的wxWidgets程序时出现 “is_enum not declared in this scope”错误

java - 如何根据用户输入声明变量?

java - 循环多个扫描仪输入直到特定输入

c - 文件写入问题

c - 获取 "*"ASCII 的垃圾值

c - C 中的乘法与除法

compiler-errors - 在这种情况下,如何修复体系结构 x86_64 的 undefined symbol ?

java - 在 If 语句中比较字符串时出错

user-input - 如何让输入框点击展开