ANSI C中的字符串

Mah*_*mam 2 c

这是C语言的第三个程序.该程序是为了演示字符串概念.

从研究中我知道字符串在其末尾有一个空字符'\ 0'来终止字符串.

我写了那段代码:

main()
{
      char  name[8];

      strcpy(name, "Mahmoud");
      printf("The contents of name are %s\n", name);
      getchar();
}
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我声明了char类型的数组以保存字符串.我的名字"Mahmoud"是7个字符,我声明大小为8的名称,"Mahmoud"为7,"\ 0"为1,它正常工作.

但是在以下代码中:

main()
{
      char  name[8];

      strcpy(name, "MahmoudEmam");
      printf("The contents of name are %s\n", name);
      getchar();
}
Run Code Online (Sandbox Code Playgroud)

当我显示名称时,输出是"MahmoudEmam",虽然名称的大小是8.

它是怎么做的?

md5*_*md5 5

C不执行任何数组边界检查(可能使用C11 ......).您正在编写数组的末尾:它是一个未定义的行为(任何事情都可能发生).