c - 逐个字符打印字符串

标签 c string

下面的代码打印到第 20 个字符,我希望代码在字符串大小超过 20 时打印错误。

    #include<stdio.h>
    #include<string.h>
    int main()
   { 
    int i = 0, l = 0;
    char s[20];
    fgets(s, 30, stdin);
    l = strlen(s);
    if (l < 20)
    {
     for (i = 0; i < l; i++)
    {
     printf("%c\n", s[i]);
    }
    }
    else
    printf("Length of the String exceeds the limit.");
    }

最佳答案

如果有人输入超过 19 个字符,您的代码将包含未定义的行为。这是因为 char s[20] 保留了 20 个字符(包括字符串终止符 '\0')。因此,使用 fgets(s,30,stdin) 读取超过 20 个字符可能会导致几乎任何问题,包括在程序的其余部分中输​​入“错误”路径。

尝试 char s[30] 并再次测试您的代码。

关于c - 逐个字符打印字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44429527/

相关文章:

c - 协议(protocol) UDP 不支持的地址族 - C

c - 如何修复 C 中指针目标类型的 'return discards ‘const’ 限定符

c - GDB 停留在 “Configuring GDB Aborting configuring GDB”

java - 字符串转十六进制短java

c# - 固定长度的字符串作为值类型用于 MemoryMappedViewAccessor

c++ - 如何将字符串添加到 char 元素的二维数组中?

java - 从日期中仅获取月份并在 java 中给出月份名称

c - 函数指针的地址和函数指针的内容是一样的吗?

c# - 当我从 C 和 C# 过渡到 C++ 时,会有什么不同?

c - 如何在C程序中检查字符串末尾是否有/字符