c++ - 将系统符号传递给 char*

标签 c++

根据对我之前问题的建议,我已经更改了我的代码。现在,我有以下代码:

char* id = someFunction();      
if (strcmp(id,"0x01") == 0) {
    unsigned char cbuffer[]={0x01, 0x00};
    id=reinterpret_cast<char*>(cbuffer);
}

我的问题 - 将 {0x01, 0x00} 传递给 char* 类型的 id 是正确的方法吗?第二个问题是——之后如何释放 id 指针?

最佳答案

您是要将 id 与字符串值“0x01”进行比较,还是要比较 id 值(如果它是 char ASCII 0x01)?

另外,你如何释放它取决于你如何分配 someFunction() 返回的 char*?这段代码是纯 C 还是 C++?如果 someFunction() 使用 new char[2] 分配,那么您必须使用 delete[] 释放它。如果您使用 C 风格分配 malloc(sizeof(char)*2),那么您必须执行 free(id)

还请考虑,在您执行 strdup 之前,如前一篇文章中所建议的,您必须释放原始 ID。这当然是假设,如果通过设计,someFunction() 返回的指针不指向某个不应被释放的全局常量。

char* id = someFunction();      
if (strcmp(id,"0x01") == 0) { // no idea if this line make sense at all. 
    free(id); // or delete[] id; if id is allocated using new char[];
    static char[] cbuffer = {0x01, 0x00};
    id = (char*) malloc(sizeof(char)*2);
    strcpy(id, cbuffer);  
}

关于c++ - 将系统符号传递给 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12858529/

相关文章:

c++ - 使用 AVX 的全连接层(点积)

c++ - 在外部声明一个数组并使用初始化列表进行初始化

c++ - C/C++ 动态链接如何在不同平台上工作?

c++ - MIPS 语言中的嵌套和递归过程

c++ - 是否可以更改轴在 qwt 中的位置?

c++ - 如何解决 Unresolved inclusion : <iostream> in eclipse?

c++ - 在 C++ 中使用 lambda 表达式和 auto 关键字时遇到问题

c++ - 错误 C3074 : an array can only be initialized with an initializer-list

c++ - 如何使用 C++ 检查安装在计算机中的 ShellIconOverLayIdentifers 总数

c++ - 将项目源代码与 CMake 下的 boost 测试链接起来