【问题标题】:String length from K&R c programming book, at the end of section 3.9 [duplicate]来自 K&R c 编程书籍的字符串长度,在第 3.9 节的末尾 [重复]
【发布时间】:2021-03-22 13:42:22
【问题描述】:

我对c中的字符串长度想了很多,字符串以空字符'\0'结尾,它在文本中不可见,从c代码中可以看出:

#include <stdio.h>
#include <string.h>
int main(){
    char s1[] = "ould";
    printf("ould string length is %ld\n", strlen(s1));
    char s2[] = {'o','u','l','d','\0'};
    printf("ould string length is %ld\n", strlen(s2));
    return 0;
}

书在3.9节最后说,s2是等价的,但是数组大小是5,从运行结果来看是4,根据我的理解和搜索,字符串以'\0'结尾,但是'\ 0'不会作为字符串长度包含在内,但是为什么作者说是5呢? 任何人都可以就此分享想法或澄清吗?

【问题讨论】:

  • strlen 不是数组大小。它是字符串的大小,最大(不包括)'\0'。包含它的数组可能要大得多。
  • ????????请在此处以纯文本形式发布代码、错误、示例数据或文本输出,而不是难以阅读、无法复制粘贴以帮助测试代码或在答案中使用的图像,并且对依赖的人构成障碍在屏幕阅读器或翻译工具上。您可以编辑问题以在问题正文中添加代码。为了便于格式化,请使用{} 按钮标记代码块,或者使用四个空格缩进以获得相同的效果。 屏幕截图的内容无法搜索、作为代码运行或复制和编辑以创建解决方案。
  • 包含字符串的字符数组必须至少比它所包含的字符串大 1 个字符,才能为终止的空字符留出空间。字符串 length 不包括这个终止空字符。所以数组的大小为 5,字符串的长度为 4。
  • 字符串长度为4,字符数组大小为5。如果有空终止符的空间,字符数组可以用来表示字符串。就是这样。查看链接的副本。

标签: c


【解决方案1】:

不要将sizeof(x)strlen(x) 混淆。 sizeof 运算符返回某事物的内存占用量:

char buffer[1024] = "Test";

这里sizeof(buffer)1024strlen(buffer)4,但在另一种情况下:

char* buffer = "Testing string";

这里sizeof(buffer)8(64 位),而strlen(buffer)14

【讨论】:

    【解决方案2】:

    字符串的长度是第一个空字符之前的字符数。包含字符 o、u、l、d 和空字符的字符串的长度为 4。

    数组的大小是数组中的字节数(或者,在某些情况下,数组中的元素数)。包含字符 o、u、l、d 和空字符的数组的大小为 5。

    strlen(s2)返回s2中字符串的长度。

    sizeof s2 计算为数组 s2 的大小。

    【讨论】:

      猜你喜欢
      • 2016-08-03
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多