给阵列一个更大的值不会增加它的大小?

Kri*_*ish 1 c

这是我做的:

#include <stdio.h>
#include <string.h>

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;

}
Run Code Online (Sandbox Code Playgroud)

它有效,但如何?我认为一旦将内存分配给程序中的数组,就无法对其进行更改.但是,该程序的输出是:

Name = longname 
Name = evenlongername 
size of the array is 9
Run Code Online (Sandbox Code Playgroud)

所以编译器肯定数组的大小仍然是9.如何能够存储大小为15字节的单词'evenlongername'(包括字符串终结符)?

ODY*_*Kon 6

在这种情况下,name分配为fit "longname",即9个字节.当你复制"evenlongername"到它时,你是在该数组的边界之外写的.在边界外写入是未定义的行为,这意味着它可能或可能不起作用.有时,它会起作用,有时候你会遇到段错误,但有时候你会得到奇怪的行为.