为什么字符串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$ 

是有一些特殊的符号,而不是$以上,是什么呢?

+1

'while(i kaylum

+0

我做了以下更改: - 添加'/ 0'作为b的最后一个元素,while(i techvigil

+1

请更新您的问题以显示实际的代码。避免仅用言语描述代码,因为这几乎总是含糊不清。例如,你或你没有NUL终止'a'吗?当它应该是''\ 0''时,你真的以''/ 0'终止吗?不清楚。因此,请显示确切的代码,并且不会有任何疑问。 – kaylum

将所有评论放入答案。原始代码中的问题主要来自于不是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; 
}