2013-01-20 88 views

回答

2

所有你需要做的是一樣的東西

char* data = (char*)malloc(8) ; // allocate space for 8 bytes 
memset(data, 0, 8) ; // set all 8 bytes to 0's 
3

C字符串是隻能由空字符終止字符數組。但是,如果你把它當作一個陣列,它可以包含內空字符:

char data[4] = { 'x', '\0', 'y', '\0' }; 

你必須要小心,但是,由於大部分的標準庫函數將無法正常工作,因爲他們預計結束的C字符串與第一個空字符。

例如,strlen(data)將在上面的示例中返回1,因爲它在第一個空字符後停止。

+1

Ehm的確,C字符串只是一個字符數組,但是它在C中專門定義了一個字符串以'\ 0'字符結尾。所以在技術上,終止字符之後的任何內容都不是C字符串的一部分。另一方面,如果將數組視爲數組,則是的,您可以將任何您喜歡的字符大小的元素粘貼到數組中。你不能再將它用作字符串了。 –

+0

@MatsPetersson感謝您的澄清。我會編輯我的評論。 –

9

C的字符串函數(例如strlen()printf()等)假定緩衝區將以空終止。如果您的緩衝區具有多個0x00字符,則不能使用將0x00視爲空字符的任何函數。

因此,您不會使用例如strcpy()(或strncpy()),而是使用memcpy() - 將內存的字節從一個位置移動到另一個位置,而不是依賴此以null結尾的行爲。