初始化char*没有给出错误

dee*_*ive -1 c c++

struct st{ 
int a; 
char *ptr; 
}obj; 

main()
{   
   obj.a=10;    
   obj.ptr="Hello World";          // (1) memory allocation?
   printf("%d,%s",obj.a,obj.ptr);
}
Run Code Online (Sandbox Code Playgroud)

ptr在struct中声明.Hello world发生分配时,未分配内存,但此程序正常工作并正确输出.在标记处完成作业时,它不应该失败/崩溃(1)吗?

Lun*_*din 6

"Hello World"是一个字符串文字,驻留在程序的只读内存部分(.rodata)中.您指向此部分然后打印内容.程序行为100%定义良好,不应该崩溃.

但是,最好始终将指向字符串文字的指针声明为const char*,因为不允许修改字符串文字.