为什么字符串a被附加到此代码中的字符串b
问题描述:
我在写一个基本的c程序来显示两个字符串,一个来自用户,即“a”,另一个在代码“b”中定义,但是当我运行代码下面的字符串“a”被附加到“b”。为什么?什么是该符号在 “A”为什么字符串a被附加到此代码中的字符串b
更新的代码结束:
#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$
是有一些特殊的符号,而不是$以上,是什么呢?
答
将所有评论放入答案。原始代码中的问题主要来自于不是NUL终止字符数组以产生有效的C字符串。
-
a
不是NUL终止。可以通过将a
数组加1并明确写入最后一个字节的NUL来修复。 -
b
不是NUL终止。可以通过使用文字字符串或'\0'
作为最后一个字节初始化b
来修复。下面的例子使用前者。
以下是纠正错误的完整代码。请注意,读取输入的代码很脆弱,因为它只接受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;
}
'while(i kaylum
我做了以下更改: - 添加'/ 0'作为b的最后一个元素,while(i techvigil
请更新您的问题以显示实际的代码。避免仅用言语描述代码,因为这几乎总是含糊不清。例如,你或你没有NUL终止'a'吗?当它应该是''\ 0''时,你真的以''/ 0'终止吗?不清楚。因此,请显示确切的代码,并且不会有任何疑问。 – kaylum