【发布时间】:2017-08-29 11:35:59
【问题描述】:
我想写一个函数,接收一个 int 参数,然后转换成一个 char 指针(c-string),但是我的代码输出不对。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
char *stoc(int n){
stringstream stream;
stream <<"Log"<<n<<".txt";
string name;
stream >>name;
int len = name.length();
char ch[len+1];
for(int i=0; i<len; i++){
ch[i]=name[i];
}
ch[len+1] = '\0';
return ch;
}
int main() {
char *name = stoc(3);
cout << name << endl;
return 0;
}
【问题讨论】:
-
在 C++ 中,您不这样做。请使用
std::string,不要使用VLA。 -
两个问题:首先C++没有variable-length arrays。其次,更糟糕的是,您返回一个指向数组的指针,该数组将超出范围并在函数返回后消失。
-
哦,你也超出了
ch数组的范围,ch[len+1] = '\0';罢工三。 -
为什么要将
std::string转换为C 风格的字符串?只需返回name而不是ch。如果您确实需要转换它们,您以后仍然可以使用std::string::c_str()。 -
最后,如果你改变函数返回一个
std::string,它可以被转换成一个单行:return "Log" + std::to_string(n) + ".txt";然后如果你出于某种原因需要一个const char*到字符串,使用c_str()获取它。