【问题标题】:string length is not showing properly [duplicate]字符串长度未正确显示[重复]
【发布时间】:2021-01-29 03:28:14
【问题描述】:

所以我这里有 3 个代码,

  1. 在第一个我还没有初始化字符串! 而strlen在ans中显示“3”

  2. 在第二个中,我用 3 个字符对其进行了初始化,但仍然与“3”相同

  3. 在第 3 次中,我用 4 个字符对其进行了初始化,输出为“4”

对不起,如果这太明显了,但我是新手,很困惑为什么它在第一个代码的输出中显示“3”。

//1st
#include<stdio.h>
#include<string.h>
int main()
{
    char y[20];
    printf("%d",strlen(y));
    return 0;
}

//2nd
#include<stdio.h>
#include<string.h>
int main()
{
    char y[20]="yas";
    printf("%d",strlen(y));
    return 0;
}
//3rd
#include<stdio.h>
#include<string.h>
int main()
{
    char y[20]="asds";
    printf("%d",strlen(y));
    return 0;
}

【问题讨论】:

    标签: c


    【解决方案1】:

    您在 1) 案例中看到的是未定义的行为。 因为y 未初始化。

    同样 strlen 返回 size_t ,打印其返回值的正确格式是:

    printf("strlen(y) = (%zu)\n",strlen(y));

    【讨论】:

    • 感谢sizeof() 函数也返回size_t
    • sizeof 不是一个函数,它是一个运算符。当type 只是一种数据类型时,您会看到很多sizeof (type),这是必需的形式。如果你想要一个对象的大小,你只需使用sizeof object。不管怎样,结果是size_t 类型的,对。 (如果您阅读标准,它会有所帮助。)
    【解决方案2】:

    遇到'\0'时strlen函数停止。

    在您的第一个代码中,char y[20] 未初始化。数组中的值可以是堆栈中剩余的任何值。恰好是 y[3]=='\0'。

    所以 strlen(y) 可以是其他环境中的任何值

    【讨论】:

    • 也许你是对的,但我在在线编译器上尝试过,它们都给出了相同的答案,但是当我将“20”更改为“100”时,它给出“4”作为输出,当我将其更改为“10”的答案是“0”是这种模式吗?如果我用愚蠢的问题给你带来困难,我很抱歉!
    猜你喜欢
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 2015-10-21
    相关资源
    最近更新 更多