作者:余陈辉syllabear | 来源:互联网 | 2022-11-29 19:09
这是我做的:
#include
#include
int main() {
char name[] = "longname";
printf("Name = %s \n",name);
strcpy(name,"evenlongername");
printf("Name = %s \n",name);
printf("size of the array is : %d",sizeof(name));
return 0;
}
它有效,但如何?我认为一旦将内存分配给程序中的数组,就无法对其进行更改.但是,该程序的输出是:
Name = longname
Name = evenlongername
size of the array is 9
所以编译器肯定数组的大小仍然是9.如何能够存储大小为15字节的单词'evenlongername'(包括字符串终结符)?
1> ODYN-Kon..:
在这种情况下,name
分配为fit "longname"
,即9个字节.当你复制"evenlongername"
到它时,你是在该数组的边界之外写的.在边界外写入是未定义的行为,这意味着它可能或可能不起作用.有时,它会起作用,有时候你会遇到段错误,但有时候你会得到奇怪的行为.