如何在C++中返回字符串

How to return a string in C++

本文关键字:返回 字符串 C++      更新时间:2023-10-16
#include <iostream>
#include<string.h>
using namespace std;
char *rt()
{
    char a[20];
    strcpy(a,"I am a beginner");
    cout<<a;
    return a;
}
int main()
{
    char *a;
    a=rt();
    cout<<endl;
    cout<<a;
    return 0;
}

在这里,我制作了一个简短的程序来理解相同的内容。我期望输出为

I am a beginner 
I am a beginner

更新:但事实证明是

I am a beginner
ëóG

我读过很多文章和帖子,但我无法理解他们复杂的语言......所以我会欣赏一个严肃的答案(对于一个愚蠢的......喜欢我!!

更新:实际上,我的作业中有一个问题是这样的

class COMPUTER
{
    char chiptype[10];
    int speed;
public:
    void showdetails()
    {
        cout<<chiptype;
        cout<<"t"<<speed;
    }
    void getdetails()
    {
        cin.getline(chiptype,10);
        cin>>speed;
    }
};

在这里,数据必须被读取并存储到二进制文件中。并且将显示芯片类型为"CD">的记录。

现在我的问题是...由于变量芯片类型是私有的,所以我不能在main((中使用它进行比较。所以我想做一个函数,返回存储在chiptype中的值。

而且我不允许使用 std::string 以及节点实现......

char a[20];

堆栈上分配。当函数rt()返回时,堆栈展开,a 超出范围。因此,您不会得到想要的结果。

当您在C++时,我可以建议使用std::string

阅读下面的评论:

另一个技巧是将数组包装在结构中,并返回 结构。由于结构是可复制的,因此数组在内部变为 可复制,不会失去范围。看到这个答案。那你不是 完全处理指针。看看这个活生生的例子——保罗·麦肯齐

使用 std::string 而不是 char[]

#include <iostream>
#include<string>
std::string rt()
{
    std::string a("I am a beginner");
    std::cout<<a;
    return a;
}
int main()
{
    std::string a;
    a=rt();
    std::cout<<std::endl;
    std::cout<<a;
    return 0;
}

在您的原始代码中,char a[20] 被分配在堆栈上,return a; 将返回一个指向堆栈变量的指针,当您在 main() 中收到该堆栈变量时,该指针不再有效 - 处理 C++ 中的字符串通常应该使用 std::string 来完成,因为它处理所有讨厌的内存管理,如果你不小心,这些内存管理会杀死你的程序。

如果您必须使用指针而不使用 std::string,则需要采用c样式的方式,如果您错过了一两个步骤,则可能会有内存泄漏的风险。 使用c样式的代码看起来像这样(保留cout c ++(

#include <iostream>
#include <strings.h>
std::string rt()
{
    char *a = malloc(20); // allocate the memory on heap
    strcpy(a,"I am a beginner");
    std::cout<<a;
    return a;
}
int main()
{
    char *a;
    a=rt();
    std::cout<<std::endl;
    std::cout<<a;
    free(a); // release the memory
    return 0;
}

注意:我不建议您执行上述样式 - 在实际应用程序中,您可能会因为忘记free内存或在内存释放后意外访问内存而遇到麻烦。

问题是一旦

程序从函数返回,a的内存就会被破坏。我认为你不应该在你的知识水平上使用动态内存,所以我建议你在函数内部定义数组并修改它:

#include <iostream>
#include<string.h>
#define MAX_LENGTH 20
using namespace std;
void rt(char *a)
{
    strcpy(a,"I am a beginner");
    cout<<a;
}
int main()
{
    char a[MAX_LENGTH];
    rt(a);
    cout<<endl;
    cout<<a;
    return 0;
}

此外,您应该注意rt不要写超过 MAX_LENGTH 个字符。

如其他用途所述,std::string而不是char []

std::string rt()
{
    std:: string a = "I am a beginner"; // This statement is equivalent to         std::string a("I am a beginner");
    std::cout << a "n";
    return a;
}

没有得到所需结果的主要原因是" char a[] 在堆栈上分配,但是当函数返回堆栈变为空时。

PS :您需要在程序中包含<string>才能使用std::string