什麼是初始化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