【问题标题】:Why is strlen working fine without '\0'? [duplicate]为什么 strlen 在没有'\0'的情况下工作正常? [复制]
【发布时间】:2017-09-23 07:42:15
【问题描述】:

作为标题,我对在 c 中使用 char* 有一些疑问。例如,如果我写这个

char *a = calloc(5, 5);
a[0] = '1';
a[1] = '1';
a[2] = '1';
a[3] = '1';
a[4] = '1';
printf("a = %s, length = %d", a, strlen(a));

输出是

a = 11111, length = 5

为什么没有'\0' strlen 工作正常?谁能帮我理解一下?

【问题讨论】:

  • 运气不好......所以不要投票给那些 cmets
  • char *a = calloc(5, 5) 对应于char a[25] = {0};
  • length = %d 也应该是length = %lu...
  • 好吧,现在只是运气不好。
  • @tonylin 无论如何都不要修改问题。

标签: c string strlen


【解决方案1】:

calloc(5, 5) 分配并清零 25 个字节。您分配其中的前五个,但第六个仍然是'\0'

【讨论】:

  • 对不起,我打错了。它是 calloc(5,sizeof(char))
  • @tonylin 如果是calloc(5,sizeof(char)) 那么你会得到未定义的行为。 calloc(5,sizeof(char)) 分配了 5 个字节。它似乎适用于您的情况,因为紧随 5 个分配字节之后的字节偶然为 0,但实际上它的值是不确定的,所以如果您在另一台计算机上运行您的程序,或者如果您使用另一个编译器编译它,或者如果您只是重新启动您的计算机,它可能不再工作了。
猜你喜欢
  • 2011-08-13
  • 2020-03-07
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
相关资源
最近更新 更多