本人初学者,询问这段关于字符串长度程序的有关问题

本人菜鸟,询问这段关于字符串长度程序的问题
#include <stdio.h>
#include <string.h>
void main()
{
  int i;
  char string[10];
  for(i=0;i<6;i++)
  {
scanf("%c",&string[i]);
  }
  printf("%s",string);
  printf("%d",strlen(string));
}

china
china
烫烫烫烫烫烫烫21

------解决方案--------------------
C/C++ code

#include <stdio.h>
#include <string.h>
int main()
{
  int i;
  char string[10];
  for(i=0;i<6;i++)
  {
    scanf("%c",&string[i]);
  }
  string[i]='\0';
  printf("%s",string);
  printf("%d",strlen(string));
  return 0;
}

------解决方案--------------------
C/C++ code

#include <stdio.h>
#include <string.h>
int main()
{
  int i;
  char string[10];
  for(i=0;i<6;i++)
  {
    scanf("%c",&string[i]);
    getchar();//吸收缓冲区内的回车键
  }
  string[i]='\0';
  printf("%s",string);
  printf("%d",strlen(string));
  return 0;
}

------解决方案--------------------
如楼上所言,打印字符串时必须是以'\0'结束的,系统识别字符串的方法是从指定地址向后搜索,直到有一个等于'\0'字符时结束,这段内存单元值视为一个字符串。
printf("%s",string)这个函数从string开始打印字符,直到遇到一个等于'\0'的字符才结束。如果string已经初始化为全0的话,是能得到正确结果的,即打印出输入字符,但是如果没有初始化,就极有可能出现乱码现象。