3

如何使用 C 字符串包含多个空字符 \x00。

4

3 回答 3

9

C 的字符串函数(例如strlen(),printf()等)假定缓冲区将以空值结尾。如果您有一个包含多个 0x00 字符的缓冲区,那么您不能使用任何将 0x00 视为空字符的函数。

因此,您可以使用- 将内存字节从一个地方移动到另一个地方,而不是使用例如strcpy()(或),而不是依赖于这种以空值终止的行为。strncpy()memcpy()

于 2013-01-20T17:51:56.840 回答
3

AC 字符串只是一个以空字符结尾的字符数组。但是,如果将其视为数组,则它可以包含内部空字符:

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

但是,您必须小心,因为大多数标准库函数都不起作用,因为它们期望 C 字符串以第一个空字符结尾。

例如,strlen(data)将在上面的示例中返回 1,因为它在第一个空字符之后停止。

于 2013-01-20T17:51:24.037 回答
2

你所要做的就是像

char* data = (char*)malloc( 8 ) ; // allocate space for 8 bytes
memset( data, 0, 8 ) ; // set all 8 bytes to 0's 
于 2013-01-20T17:48:42.673 回答