为什么字符串a会在此代码

时间:2016-04-03 06:30:34

标签: c

我正在写一个基本的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,它是什么?

1 个答案:

答案 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;
}