【问题标题】:Why unwanted character getting showed when I print a string为什么打印字符串时会显示不需要的字符
【发布时间】:2022-11-13 16:19:31
【问题描述】:
#include<stdio.h>
int main()
{
    char main[]="Structured Programming";
    char copy[30];
    for (int i = 0; main[i] !='\0' ; i++)
    {
        copy[i]=main[i];
    }
    printf("%s",copy);
}

在上面的问题中,这应该打印Structured Programming,但我得到Structured Programming a,这发生在所有ide上,但不是在线编译器,在线编译器工作正常,谁能告诉我原因?

【问题讨论】:

  • 该代码具有未定义的行为,因为您将一个数组传递给printf,该数组不是以 nul 结尾的。如果您使用 char copy[30] = { 0 }; 初始化数组,那么它将以 nul 结尾,并且是预期的 C 字符串。
  • 当我在我的机器上编译和运行时它工作正常。
  • 所以可能。在“工作”阵列的平台上发生了在正确的位置有一个0 来终止字符串。但是局部变量是未初始化的:你必须明确地这样做。

标签: c compiler-errors


【解决方案1】:

printf 函数需要打印以 NULL 结尾的字符串。否则,您的程序可能会访问您不想访问的额外字节字符串。这取决于环境和编译器如何对这种情况做出反应,但通常它是未定义的行为。您应该使字符串的最后一个符号等于'

【解决方案2】:

有时“未定义的行为”意味着它似乎有效。你可以初始化copy,或者直接复制NUL:

i = 0;
do  {
    copy[i] = main[i];
    } while (main[i++]);

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    相关资源
    最近更新 更多