例如,如果我写:
void function(char *k){ printf("%s",k);}
并这样称呼它:
function("hello");
代码是否将该字符串转换为:“ hello \ 0”?还是我必须添加它?
答案 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]
,h
,e
,l
,l
和o
的{{1}}数组,根据定义。因此,在这里“将其传递给函数”这一事实完全无关紧要。
无需添加任何内容。
答案 3 :(得分:1)
字符串文字不会仅传递给第一个字符的指针传递给函数。被引用的对象将具有所有字符+终止于零。