如何将std :: string复制到unsigned char数组中?

9
如何将std :: string(示例)复制到无符号字符数组(陷阱)?
int main() {
    unsigned char trap[256];
    std::string sample = ".1.3.6.1.4";
    strcpy(trap,sample.c_str());
    std::cout << trap << std::endl;
}

上面的代码会抛出错误:

time.cpp: In function ‘int main()’:
time.cpp:20: error: invalid conversion from ‘unsigned char*’ to ‘char*’
time.cpp:20: error:   initializing argument 1 of ‘char* strcpy(char*, const char*)’

使用::memcpy()或将其转换为char* - YSC
1
简短回答:你不应该这样做。使用用户的 char 数组代替。 - user3528438
1
为什么这是你想要做的? - erip
@YSC:谢谢,我正在使用C++,所以请在上述情况下编写转换行? - Ragav
1
我知道你需要做什么,但我不知道你为什么要这样做。 - erip
显示剩余2条评论
2个回答

15

这是一种方式:

#include <algorithm>
#include <iostream>

auto main() -> int
{
    unsigned char trap[256];
    std::string sample = ".1.3.6.1.4";
    std::copy( sample.begin(), sample.end(), trap );
    trap[sample.length()] = 0;
    std::cout << trap << std::endl;
}

另外检查缓冲区是否足够大可能是个好主意。


缺少 return - Simon Kraemer
我被尾部返回类型误导了...还有我的懒惰:没有仔细检查... - Simon Kraemer
@ 乾杯和祝好。- 阿尔夫:非常感谢!! - Ragav
仅仅看到这个,我意识到如果C++实现中std::string具有原始指针作为迭代器(不太可能但允许),未经限定的copy调用将不会调用参数相关查找,并且它将无法被找到。通过添加命名空间限定来修复。 - Cheers and hth. - Alf

3
使用reinterpret_cast也是可行的:
int main() {
    std::string sample = ".1.3.6.1.4";
    auto uCharArr = reinterpret_cast<unsigned char*>(sample.c_str());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接