C 如何编写返回字符指针的功能
C++ How to write function that return char pointer
我想编写一个接收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] = ' ';
return ch;
}
int main() {
char *name = stoc(3);
cout << name << endl;
return 0;
}
总结注释:
通常,您不使用C 中的C风格串,只需坚持std::string
s即可。因此,您宁愿返回name
而不是转换后的ch
,尤其是因为您已经创建了std::string
。访问至少C 11您可以轻松地将相当长的功能转换为单线
c 11
std::string stoc(int n) {
return "Log" + std::to_string(n) + ".txt";
}
先验C 11
std::string stoc(int n) {
std::ostringstream oss;
oss << "Log" + n + ".txt";
return oss.str(); // by accessing a stringstreams content directly there is no need to use an extra variable
}
如果您需要以后在某个地方使用C风格的弦乐,例如作为C-图谱函数的参数,您可以使用c_str
将任何std::string
转换为c风格等效:
int main() {
std::string name = stoc(3);
std::cout << name << std::endl;
}
您应该执行此操作,而不是将指针返回到本地变量(以未定义的行为产生):
...
char *ch = new char[len+1];
for(int i=0; i<len; i++){
ch[i]=name[i];
}
ch[len] = ' ';
...
int main() {
char *name = stoc(3);
cout << name << endl;
delete [] name; // delete what has been allocated in stoc
return 0;
}
还请注意ch[len] = ' '
而不是ch[len + 1] = ' '
。
但是,在C 中,您应该使用std::string
,而不是完全处理char
数组,new
和delete
。
相关文章:
- 链表删除功能的单指针 // 是可能的
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- char* 除了作为C++中的指针之外,还有其他功能吗?
- 具有小对象优化功能的智能指针
- 如何定义和设置指向模板类方法的功能指针
- 将状态传递给功能指针
- 如何使用指针向量为班级制作复制功能
- 我对C 中共享指针列表进行排序的功能未完成类型
- 如何使用结构内的功能指针调用私有函数
- 如何将自己的智能指针传递到功能
- 模板功能以检查智能指针是否为空
- 如何存储指针以功能模板,该模板将可呼叫对象作为其参数之一
- 功能指针不起作用(C )
- 将C 方法作为功能指针传递
- 字符指针功能以复制C 中的字符串
- 指针?指针功能
- 反向指针功能问题
- 无效指针功能的输出
- 更好地解释C++指针功能
- 用memcpy c 读取并写入指针功能