什么是初始化unsigned char*
的正确方法?我目前做这个:正确的方式来初始化无符号字符*
unsigned char* tempBuffer;
tempBuffer = "";
或者我应该使用memset(tempBuffer, 0, sizeof(tempBuffer));
?
什么是初始化unsigned char*
的正确方法?我目前做这个:正确的方式来初始化无符号字符*
unsigned char* tempBuffer;
tempBuffer = "";
或者我应该使用memset(tempBuffer, 0, sizeof(tempBuffer));
?
第二种方法会留下一个空指针: 如果您希望分配一个字符串,这可以做如下。请注意,这里没有为缓冲区声明任何空间,您将声明指针指向必须在别处创建的缓冲区。如果将其初始化为""
,则会使指针指向一个静态缓冲区,其中只有一个字节为空终止符。如果你想要一个缓冲区,你可以在稍后写入字符,使用Fred的数组建议或类似malloc
。
这取决于你想达到什么(例如,你是否想修改字符串)。见例如http://c-faq.com/charstring/index.html了解更多详情。
请注意,如果您声明一个指向字符串常量,它应该是const
,即:
const unsigned char *tempBuffer = "";
由于这是一个指针,你要么要初始化它第一次为NULL这样的:
unsigned char* tempBuffer = NULL;
unsigned char* tempBuffer = 0;
或分配可变的地址,像这样:
unsigned char c = 'c';
unsigned char* tempBuffer = &c;
编辑:
unsigned char myString [] = "This is my string";
unsigned char* tmpBuffer = &myString[0];
如果计划是将它作为缓冲区,并且您希望稍后将其移至指向某处的位置,则将其初始化为NULL,直到它指向您想要写入的某个位置,而不是空字符串。
unsigned char * tempBuffer = NULL;
std::vector< unsigned char > realBuffer(1024);
tempBuffer = &realBuffer[0]; // now it really points to writable memory
memcpy(tempBuffer, someStuff, someSizeThatFits);
答案取决于你使用unsigned char的内容。一个字符是什么也没有其他的,但是一个小整数,在所有实现的99%上大小为8位。
C恰好有一些字符串支持与char匹配,但不限制字符串对char的使用。
初始化指针的正确方法取决于1)其范围和2)其预期用途。
如果指针被声明为静态的,或者在文件范围声明,那么ISO C/C++会保证它被初始化为NULL。编程风格纯粹主义者仍然会将其设置为NULL以保持其风格与局部范围变量一致,但理论上这样做毫无意义。
至于什么初始化它...设置为NULL。不要将它设置为指向“”,因为它会分配一个包含空终止符的静态虚拟字节,只要将指针指定给别的东西,这个静态内存泄漏就会变得很小。
有人可能会质疑为什么你需要首先将它初始化为任何东西。在使用之前将其设置为有效的。如果你在给它一个有效值之前担心使用指针,你应该得到一个合适的静态分析器来找到这样简单的错误。即使大多数编译器也会捕获这个错误并给你一个警告。
要“正确”初始化一个指针(unsigned char *
在你的例子),你需要做的只是一个简单的
unsigned char *tempBuffer = NULL;
如果您想初始化的unsigned char
秒的阵列,您可以执行下列操作事情:
unsigned char *tempBuffer = new unsigned char[1024]();
// and do not forget to delete it later
delete[] tempBuffer;
或
unsigned char tempBuffer[1024] = {};
我会还建议看看std::vector<unsigned char>
,你可以初始化这样的:
std::vector<unsigned char> tempBuffer(1024, 0);
如果你知道缓冲区在编译时的大小:
unsigned char buffer[SIZE] = {0};
为了在分配的动态分配的缓冲区(缓冲区运行时或在堆):
1.Prefer的new
操作者:
unsigned char * buffer = 0; // Pointer to a buffer, buffer not allocated.
buffer = new unsigned char [runtime_size];
级
2.多的解决方案,“初始化”,或者简单填入值:
std::fill(buffer, buffer + runtime_size, 0); // Prefer to use STL
memset(buffer, 0, runtime_size);
for (i = 0; i < runtime_size; ++i) *buffer++ = 0; // Using a loop
3,C语言方面则提供了分配和初始化一个电话。
然而,该函数不调用对象的构造函数:
buffer = calloc(runtime_size, sizeof(unsigned char))
注意,这也将缓冲区中的所有位为零;你在初始值中没有选择。
变量名称错误。它不是缓冲区,只是一个指针。用unsigned char tempBuffer创建缓冲区[666]; – 2011-02-02 15:07:58