我是一个试图编写c ++代码的C程序员.我听说string
在C++中比char*
在安全性,性能等方面更好,但有时它似乎char*
是一个更好的选择.有人建议程序员不要char*
在C++中使用,因为我们可以做所有char*
可以用字符串做的事情,而且它更安全,更快.
你曾经用过char*
C++吗?具体条件是什么?
Cha*_*via 27
它使用起来更安全,std::string
因为您不必担心为字符串分配/释放内存.C++ std::string
类可能在char*
内部使用数组.但是,该类将为您管理内部数组的分配,重新分配和释放.这消除了使用原始指针所带来的所有常见风险,例如内存泄漏,缓冲区溢出等.
此外,它也非常方便.您可以复制字符串,附加到字符串等,而无需手动提供缓冲区空间或使用strcpy/strcat等函数.使用std :: string就像使用=
或+
运算符一样简单.
基本上,它是:
std::string s1 = "Hello ";
std::string s2 = s1 + "World";
Run Code Online (Sandbox Code Playgroud)
与...
const char* s1 = "Hello";
char s2[1024]; // How much should I really even allocate here?
strcpy(s2, s1);
strcat(s2, " World ");
Run Code Online (Sandbox Code Playgroud)
编辑:
回应你对char*
C++中使用的编辑:许多C++程序员声称你永远不应该使用它,char*
除非你正在使用一些需要它的API /遗留函数,在这种情况下你可以使用std::string::c_str()
函数转换std::string
为const char*
.
但是,我想说在C++中有一些C数组的合法用法.例如,如果性能绝对至关重要,则堆栈上的小型C阵列可能是更好的解决方案std::string
.您可能还在编写一个程序,您需要绝对控制内存分配/释放,在这种情况下您将使用char*
.另外,正如评论部分所指出的,std::string
不能保证为您提供连续的可写缓冲区*,因此std::string
如果您需要程序完全可移植,则无法直接从文件写入.但是,如果您需要这样做,std::vector
仍然可能更喜欢使用原始C阵列.
*虽然在C++ 11中这已经改变,std::string
但它确实为您提供了连续的缓冲区
好吧,自从我第一次回答以来,问题发生了很大变化.
与std :: string相比,Native char数组是内存管理和缓冲区溢出的噩梦.我总是喜欢使用std :: string.
也就是说,由于性能限制,char数组在某些情况下可能是更好的选择(虽然std :: string实际上可能在某些情况下更快 - 先测量!)或禁止在嵌入式环境中使用动态内存等.