如何存储' \ 0'在char数组中

时间:2017-01-08 17:56:22

标签: c string printf

是否可以将char '\0'存储在char数组中,然后存储不同的字符?例如

char* tmp = "My\0name\0is\0\0";

我被教导实际上在C中称为字符串列表,但是当我尝试打印上面的内容时(使用printf("%s\n", tmp)),它只打印

  

"我"

2 个答案:

答案 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);
}