【问题标题】:why the result of strlen() out of my expection?为什么 strlen() 的结果出乎我的意料?
【发布时间】:2022-08-02 18:58:09
【问题描述】:

函数 strlen() 计算字符串中最多为 NUL 的字符数,它不包含 NUL。在 ASCII 中,NUl 等于 \'\\0\'。

#include<stdio.h> 
#include<string.h>
int main(void)
{
    char a[]=\"abc\";
    char b[]=\"abcd\'\\0\'def\";
    printf(\"%d\\n%d\",strlen(a),strlen(b));
    return 0;
}

结果是 3 和5. 第二个结果与第一个结果相矛盾。 因此,我试图找到如何实现 strlen()。

int strlen(char a[])
{
    int i;
    for(i=0;a[i]!=\'\\0\';i++);
    return i;
}

基于此代码,我可以理解第一个结果,但真的无法理解第二个结果。 为什么第二个结果不是 4 而是 5?提前谢谢。

  • 仅对 char 文字使用单引号。
  • 将 b[] 打印到控制台...您会看到(左)撇号是神秘的第 5 个字符...删除 \\0 您会看到有两个撇号...
  • a, b, c, d, 单引号, 空字符, 单引号, d, e, f

标签: c


【解决方案1】:
char b[]="abcd'\0'def";

数组元素是

[a][b][c][d]['][0]['][d][e][f][0]

所以第一个[0]之前的字符串的长度是5,因为它也包含'字符。

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 2014-04-02
    • 1970-01-01
    • 2020-09-26
    • 2021-03-25
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    相关资源
    最近更新 更多