繁体   English   中英

strncpy转换代码中的等价性

[英]strncpy To strcpy Equivilence in Code

我有这个丑陋的功能,我觉得整个strncpy应该只是一个strcpy

void PackData(char*& cursor, const std::string& data) {
    *(reinterpret_cast<int*>(cursor)) = static_cast<short>(data.length() + 1);
    cursor += sizeof(int);
    // copy the text to the buffer
    ::strncpy(cursor, data.c_str(), data.size());
    cursor += (data.length() * sizeof(char));
    *(reinterpret_cast<char*>(cursor)) = 0;
    cursor += sizeof(char);
}

cursor保证有足够的空间来容纳所有复制的数据。 并且data在终止处仅包含'\\0'字符。

我想更新此函数以使用strcpy ,并删除一些难看的东西。 这是我所拥有的:

void PackData(char*& cursor, const std::string& data) {
    const int size = data.size() + 1;

    std::copy_n(cursor, sizeof(int), reinterpret_cast<char*>(&size));
    cursor += sizeof(int);
    strcpy(cursor, data.c_str());
    cursor += size;
}

我的代码工作正常,但是我想问问是否有人看到我可能错过的任何不良行为?

编写该代码的人都不知道他们在做什么。 使用strncpy没有意义,因为在调用中传递给它的长度是源的长度,而不是目标的长度。 最后的reinterpret_cast只是将cursor转换为其原始类型。 摆脱这种废话。 您的代码是很好的替代品。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM