首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串和C++中的字符串函数

字符串和C++中的字符串函数
EN

Stack Overflow用户
提问于 2012-07-17 14:46:54
回答 4查看 175关注 0票数 2

我写了以下内容:

代码语言:javascript
复制
#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

屏幕上没有打印任何内容的原因是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-17 14:50:32

代码语言:javascript
复制
char str[10];
// ...
return str;

这是错误的!局部变量在其作用域退出时无效;因此使用返回的数组是未定义的行为。你必须malloc一个字符串并返回它:

代码语言:javascript
复制
return strdup(str);
票数 6
EN

Stack Overflow用户

发布于 2012-07-17 15:14:49

关于结果的问题已经被讨论过了。您可以执行的解决方案列表包括:

1)。将字符串全局定义为"char str10“,并在函数main和getString中使用它

2)。在函数getString中使用malloc/calloc,代码如下...

代码语言:javascript
复制
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中按如下方式声明

代码语言:javascript
复制
static char str[10];
票数 3
EN

Stack Overflow用户

发布于 2012-07-17 14:53:12

让您的代码工作的最简单的方法,尽管不一定是最好的方法,是使str成为静态的。

代码语言:javascript
复制
static char str[10];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11517298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档