我是C ++的新手,还没有完全掌握所有的概念,所以我很困惑为什么这个功能不起作用。我目前不在家,所以我还不能发布编译器错误,我会在回家后立即执行此操作。
这是功能。
const char * ConvertToChar(std::string input1, std::string input2) {
// Create a string that you want converted
std::stringstream ss;
// Streams the two strings together
ss << input1 << input2;
// outputs it into a string
std::string msg = ss.str();
//Creating the character the string will go in; be sure it is large enough so you don't overflow the array
cont char * cstr[80];
//Copies the string into the char array. Thus allowing it to be used elsewhere.
strcpy(cstr, msg.c_str());
return * cstr;
}
将两个字符串连接在一起并返回一个const char *。那是因为我想要使用它的函数需要传递一个const char指针。
答案 0 :(得分:3)
代码返回指向本地(堆栈)变量的指针。当调用者获得此指针时,该局部变量不再存在。这通常被称为悬挂参考。
如果您想将std::string
转换为c风格的字符串,请使用std::string::c_str()
。
因此,要连接两个字符串并获取一个c风格的字符串,请执行以下操作:
std::string input1 = ...;
std::string input2 = ...;
// concatenate
std::string s = input1 + input2;
// get a c-style string
char const* cstr = s.c_str();
// cstr becomes invalid when s is changed or destroyed
答案 1 :(得分:1)
不知道错误是什么,很难说,但是这个 行:
const char* cstr[80];
似乎错了:它创建了一个包含80个指针的数组;当它
隐式转换为指针,类型将为char
const**
,当它作为传递时应该给出错误
strcpy
的参数,以及返回中的取消引用
语句与写cstr[0]
的语句相同,并返回
数组中的第一个指针 - 自数组的内容
从未被初始化,这是未定义的行为。
在继续之前,您必须定义功能 应该返回 - 不仅是它的类型,而是指向的位置 记忆将驻留。有三种可能的解决方案:
除此之外:没有必要使用std::ostringstream
如果你所做的只是连接;只需添加两个字符串。
无论您使用何种解决方案,请验证结果是否合适。