对于一个项目,我必须向用户询问文件名,我使用 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/