【发布时间】:2012-05-08 22:11:17
【问题描述】:
我一直在使用 C++ 字符串并尝试使用 C 函数(例如 strcpy())将 char * 字符串加载到 std::string 中。由于strcpy() 将char * 作为参数,因此我必须将其转换为如下所示:
std::string destination;
unsigned char *source;
strcpy((char*)destination.c_str(), (char*)source);
代码运行良好,当我在调试器中运行程序时,*source 的值存储在 destination 中,但由于某些奇怪的原因,它不会与语句一起打印出来
std::cout << destination;
我注意到如果我使用
std::cout << destination.c_str();
值打印正确,一切正常。为什么会这样?有没有更好的方法将unsigned char* 或char* 复制到std::string(字符串流?)这似乎只有在我在复制操作中将字符串指定为foo.c_str() 时才会发生。
编辑:为了回答“你为什么要这样做?”这个问题,我使用strcpy() 作为一个简单的例子。有时它比分配更复杂。例如,必须使用 strncpy() 将仅 X 数量的字符串 A 复制到字符串 B 中,或者将 std::string 传递给 C 库中的函数,该函数将 char * 作为缓冲区的参数。
【问题讨论】:
-
所以,您忽略了编译器给您的错误并决定将其关闭并将其转换为
(char*)?你想知道为什么你有问题吗? -
你为什么不直接使用:destination = source;
-
所有答案都问隐含的问题,为什么?为什么?
-
c_str() 返回 const 是有原因的。
-
不要使用 C 转换。它隐藏了错误(比如这个)。