【发布时间】:2018-10-08 07:41:19
【问题描述】:
我是否应该始终将 char 数组的最后一个值设置为 '\0'?
char search_for[80];
search text here
printf("Search for: ");
scanf("%79s", search_for);
search_for[strlen(search_for) - 1] = '\0';
这是来自 C 书籍的示例。
【问题讨论】:
-
如果
scanf调用没有添加终止符,则对strlen的调用将不起作用。 -
注意:如果
search_for[strlen(search_for) - 1] = '\0';确实出现在某本C类书籍中,则说明这本书不是值得信赖的学习资料。这是一本严肃的书中无法接受的基本错误。 -
简短的回答是“仅当您打算将数组的内容用作 C 字符串时”。所有需要 C 中字符串的函数都需要 nul-terminated 的内容。如果您没有将内容用作字符串(这意味着您不会尝试使用
"%s"格式说明符打印它,或者不会将数组传递给字符串函数,例如strcpy等...,然后没有要求。但是如果你想将内容用作字符串,那么是的,这是必须的。