为什么我的调试器在字符数组中显示额外的字符?
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已经给出正确答案
注意显示的输入字符串值:
我写了下面的代码:
#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已经给出正确答案