正确初始化无符号字符的方法*

Bri*_*ian 16 c c++ unsigned char

初始化的正确方法是unsigned char*什么?我目前正在这样做:

unsigned char* tempBuffer;
tempBuffer = "";
Run Code Online (Sandbox Code Playgroud)

或者我应该使用memset(tempBuffer, 0, sizeof(tempBuffer));

Dmi*_*try 21

要"正确"初始化指针(unsigned char *如在您的示例中),您只需要做一个简单的操作

unsigned char *tempBuffer = NULL;
Run Code Online (Sandbox Code Playgroud)

如果要初始化unsigned chars 数组,可以执行以下任一操作:

unsigned char *tempBuffer = new unsigned char[1024]();
// and do not forget to delete it later
delete[] tempBuffer;
Run Code Online (Sandbox Code Playgroud)

要么

unsigned char tempBuffer[1024] = {};
Run Code Online (Sandbox Code Playgroud)

我还建议std::vector<unsigned char>你看一下,你可以像这样初始化:

std::vector<unsigned char> tempBuffer(1024, 0);
Run Code Online (Sandbox Code Playgroud)


Kar*_*ldt 9

第二种方法将为您留下空指针.请注意,这里没有为缓冲区声明任何空间,而是声明指向必须在别处创建的缓冲区的指针.如果将其初始化为"",则会使指针指向一个只有一个字节的静态缓冲区 - 空终止符.如果你想要一个缓冲区,你可以在以后写字符,使用Fred的数组建议或类似的东西malloc.


Ker*_*own 6

因为它是一个指针,你要么首先将它初始化为NULL,如下所示:

unsigned char* tempBuffer = NULL;
unsigned char* tempBuffer = 0;
Run Code Online (Sandbox Code Playgroud)

或指定变量的地址,如下所示:

unsigned char c = 'c';

unsigned char* tempBuffer = &c;
Run Code Online (Sandbox Code Playgroud)

编辑:如果您希望分配字符串,可以按如下方式完成:

unsigned char myString [] = "This is my string";
unsigned char* tmpBuffer = &myString[0];
Run Code Online (Sandbox Code Playgroud)

  • 值得澄清的是,您的第二个示例将为您提供指向有效字符的有效指针,但它不能用于标准字符串函数(即使类型相同),因为字符串函数需要指向以空字符结尾的字符数组的指针,而不是指向单个字符的指针.我的猜测是OP有兴趣使用字符串. (2认同)