我写了以下内容:
#include <stdio.h>
#include <string.h>
char* getString();
char* getString(){
char str[10];
gets(str);
return str;
}
int main() {
char* s;
s=getString();
strcpy(s,"Hi");
puts(s);
return 0;
}我知道str的长度必须小于10,但即使我只写了"Hi",也没有打印出来。据我所知,应该没问题。编译器会说fgets is dangerous and should not be used。
屏幕上没有打印任何内容的原因是什么?
发布于 2012-07-17 14:50:32
char str[10];
// ...
return str;这是错误的!局部变量在其作用域退出时无效;因此使用返回的数组是未定义的行为。你必须malloc一个字符串并返回它:
return strdup(str);发布于 2012-07-17 15:14:49
关于结果的问题已经被讨论过了。您可以执行的解决方案列表包括:
1)。将字符串全局定义为"char str10“,并在函数main和getString中使用它
2)。在函数getString中使用malloc/calloc,代码如下...
char* getString(){
char *str = NULL;
str = (char *)calloc(10, sizeof(char));
gets(str);
return str;
}
int main() {
char* s;
s=getString();
strcpy(s,"Hi");
puts(s);
free(s);
return 0;
}`3)。使用static可以获得现成的帮助。但这在概念上并不是正确的方法。
例如,在函数getString中按如下方式声明
static char str[10];发布于 2012-07-17 14:53:12
让您的代码工作的最简单的方法,尽管不一定是最好的方法,是使str成为静态的。
即
static char str[10];https://stackoverflow.com/questions/11517298
复制相似问题