我正在写一个基本的c程序来显示两个字符串,一个来自用户,即“a”,另一个是在代码“b”中定义但是当我运行下面的代码时,“a”被附加到“b” 。为什么?那个符号在“a”
的末尾是什么更新代码:
#include <stdio.h>
#include <string.h>
int main()
{
char a[ 5 ];
int i=0;
while(i<5)
{
a[i]=getchar();
i++;
}
char b[]={'r','f','s','/0'};
printf("output:-");
printf("\n %s",a);
printf("\n %s",b);
return 0;
控制台
qwert
output:-qwert$
rfs$qwert$
有一些特殊符号而不是$ above,它是什么?
答案 0 :(得分:1)
将所有评论都写入答案。原始代码中的问题主要源于NUL不终止字符数组以生成有效的C字符串。
a
未终止NUL。可以通过将a
数组增加1并显式地将NUL写入最后一个字节来修复。b
未终止NUL。可以通过使用文字字符串初始化b
或使用'\0'
作为最后一个字节的char数组来修复。以下示例使用前者。以下是纠正错误的完整代码。请注意,读取输入的代码是脆弱的,因为它只接受5个字符的字符串。
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[6];
int i=0;
while (i<5) {
a[i]=getchar();
i++;
}
a[i] = '\0';
char b[]="rfs";
printf("output:-\n");
printf(" %s\n",a);
printf(" %s\n",b);
return 0;
}