gpt4 book ai didi

方法中的 C++ char*

转载 作者:太空宇宙 更新时间:2023-11-04 15:54:40 24 4
gpt4 key购买 nike

听着,我想写一个从用户那里获取一行的方法,所以我这样写:

static char* getline(){
char temp[0];
cin >> temp;
return temp;
}

我还有一个 writeline 方法:

static void writeline(char* text){
cout<<text<<endl;
}

然后我转到主页面并写了这个:

writeline(getline());

它没有用..我想说的是,当我写这篇文章时:

static char* getline(){
char temp[0];
cin >> temp;
writeline(getline());
return temp;
}

我在主要部分写道:

getline();

它确实起作用了!

那我需要做什么呢?

最佳答案

这里发生了一些事情。

首先,在使用char* 时必须分配内存;零长度数组不够长。使用 std::string 会更容易,它会为您处理所有脏活。此外,在函数中声明为大小的数组分配在堆栈上而不是堆上;一旦您的 getline 函数返回,内存就不再有效。

其次,字符串的 >>> 运算符读取下一个单词,而不是下一行。为此,您需要 getline 方法。棘手的事情来了:getline 不使用 std::string,因此您仍然需要 char*。您只是不想返回一个,因为除非它是全局(或静态)数组,否则您需要释放它。因此,您可以执行以下操作:

std::string getline() {
char buf[1024]; // we have a cap on the line size
cin.getline(buf, 1024); // reads a line, up to 1023 characters
return std::string(buf); // makes a copy of buf into a properly-managed string
}

void writeline(const std::string &s) {
cout <<s <<endl;
}

现在你可以做

writeline(readline());

它应该可以正常工作。可以看到here有关 cin.getline() 的更多信息。

关于方法中的 C++ char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1541317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com