【问题标题】:How to copy a std::string to unsigned char array?如何将 std::string 复制到无符号字符数组?
【发布时间】:2016-05-21 05:09:33
【问题描述】:

如何将 std::string (sample) 复制到 unsigned char 数组 (trap)?

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* 的演员。
  • 简短回答:您不应该这样做。用户 char 数组。
  • 你为什么要这样做?
  • @YSC:谢谢,我用的是c++,所以请在上面的情况下写演员表?
  • 我知道你需要做什么,我不知道为什么你想这样做。

标签: c++ arrays string type-conversion


【解决方案1】:

这是一种方法:

#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 丢失。
  • -.- 我被尾随的返回类型误导了......以及我的懒惰:不要仔细检查......
  • @ 干杯和hth。 - 阿尔夫:非常感谢!!
  • 只是看着这个我意识到,在一个 C++ 实现中,std::string 有原始指针作为迭代器(不太可能但允许),对copy 的非限定调用不会调用 Argument Dependent Lookup,它会找不到。通过添加命名空间限定来修复。
【解决方案2】:

也可以使用 reinterpret_cast:

int main() {
    std::string sample = ".1.3.6.1.4";
    auto uCharArr = reinterpret_cast<unsigned char*>(sample.c_str());
}

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2015-04-23
    • 2019-05-29
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多