为什么我的调试器在字符数组中显示额外的字符?

Why does my debugger show extra characters in character array?

注意显示的输入字符串值:

我写了下面的代码:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define MAX 50
int main()
{
    printf("\nEnter string:");
    char input[MAX];
    gets(input);
    puts(input);
    return 0;
}

我输入了“(A+B)*C”作为输入。但是为什么调试器会显示额外的字符?

最后不应该是\0吗?

C 中的字符串以 NUL 字符终止:'[=12=]'。您可以忽略数组 input 之后的所有字符,因为它们是 uninitialized/garbage.

您可以在使用前初始化您的数组:

char input[MAX] = {'[=10=]'};

这样您将看到 "(A+B)*C" 之后的所有 '[=12=]'

这称为 Garbage data,它存储在您的缓冲区获得的地址上,但未被使用。您可以通过添加空终止符 '\n' 来简单地使其消失。

我建议使用 fgets() 而不是 gets() 因为 gets() 可能很危险(为了安全地使用 gets(),您必须确切地知道有多少个字符你会阅读,这样你就可以让你的缓冲区足够大)。 fgets() 还在末尾采用 '\n' 字符,为了防止这种情况,您可以编写以下行:input[strlen(input)-1] = '[=16=]';

关于你的问题@Fiddling Bits已经给出正确答案