本帖最后由 jackz007 于 2019-11-10 22:06 编辑
如果这样定义 name,那么,编译程序不会为 name 分配空间,如果向 name 中储存字符串,那么,就会侵占其他变量占用的空间,导致占用相关内存的其他变量数值或内容发生非预期的改变,如果这些变量赋值,又会反过来破坏 name 的内容,因为这些内存本来就是编译程序为这些变量分配的合法空间。
只要运行一下下面的代码,就可以看到字符串变量 b 是如何袭夺字符串变量 a 的空间的。#include <stdio.h>
#include <string.h>
int main(void)
{
char a[256] , b[0] ;
strcpy(a , "Hello , world !") ;
printf("%s\n" , a) ; // 正常显示 "Hello , world !\n"
strcpy(b , "I love fishC !") ; // 表面上改变的是 b,实际上改变的是 a
printf("%s\n" , a) ; // 显示的并不是 "Hello , world !\n",而是 "I love fishC !\n"
}
下面是编译、运行实况C:\Bin>g++ -o x x.c
C:\Bin>x
hello , world !
I love fishC !
C:\Bin>
|