【问题标题】:Should I always set char[] last value to '\0'? [duplicate]我应该总是将 char[] last value 设置为 '\0' 吗? [复制]
【发布时间】: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 等...,然后没有要求。但是如果你想将内容用作字符串,那么是的,这是必须的。

标签: c scanf


【解决方案1】:

当使用带有%s 格式的scanf 时,它会为您添加它,但是当您不确定您的字符串是否为空终止时,您遇到的一个巨大的逻辑错误是使用strlen

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-02
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2012-02-18
    相关资源
    最近更新 更多