当您在函数中传递文字字符串作为参数时,C是否添加“ \ 0”?

时间:2018-09-28 22:05:35

标签: c string

例如,如果我写:

void function(char *k){ printf("%s",k);}

并这样称呼它:

function("hello");

代码是否将该字符串转换为:“ hello \ 0”?还是我必须添加它?

4 个答案:

答案 0 :(得分:4)

所有字符串文字向包含所有已写入字符的数组提供char[],后跟\0。它的长度是您编写的字符串的长度加上1(char[6]中的"Hello")。可以在here中找到更多信息,他们还使用字符串“ Hello”作为示例。

请注意,在C(和C ++)中,此字符数组不可修改-这样做是未定义的行为。通常用const表示。但是,写作

char[] myarr = "Hello";

将创建一个副本,并且可以对其进行修改。 myarr将包含\0,大小为6 char s。

答案 1 :(得分:3)

C11 Standard 第6.4.5节字符串文字,第6段(第71页):

  

在翻译阶段7中,每个多字节附加一个字节或零值的代码   由一个或多个字符串文字产生的字符序列。   78)   多字节字符   然后使用序列来初始化静态存储持续时间和长度的数组   足以包含序列

答案 2 :(得分:3)

字符串字面量本身已经包含一个终止符\0,无论您对该字面量进行什么操作。 "hello"始终是char [6]hello的{​​{1}}数组,根据定义。因此,在这里“将其传递给函数”这一事实完全无关紧要。

无需添加任何内容。

答案 3 :(得分:1)

字符串文字不会仅传递给第一个字符的指针传递给函数。被引用的对象将具有所有字符+终止于零。