是否可以将char '\0'
存储在char数组中,然后存储不同的字符?例如
char* tmp = "My\0name\0is\0\0";
我被教导实际上在C中称为字符串列表,但是当我尝试打印上面的内容时(使用printf("%s\n", tmp)
),它只打印
"我"
答案 0 :(得分:5)
是的,此外,肯定有可能,您不能将该数组用作 string ,并将内容存储在'\0'
之后。
根据定义,字符串是char
数组,以空字符'\0'
结尾。所有与字符串相关的函数将在终止空字节处停止(例如,在实际内容之间包含'\0'
的参数,传递给%s
中的格式说明符printf()
。
引用C11
,章节§7.1.1,术语定义
字符串是连续的字符序列由第一个空格终止并包括第一个空格 性格。 [...]
但是,对于逐字节处理,只要保持在分配的内存区域内,就可以继续使用。
答案 1 :(得分:1)
您遇到的问题是使用您用来打印tmp
的功能。像printf这样的函数会假设字符串是空终止的,所以它会在看到第一个\ 0
如果您尝试以下代码,您会在tmp
int main(int c,char** a){
char* tmp = "My\0name\0is\0\0";
write(1,tmp,12);
}