2013-01-20 83 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结尾的行为。