在C中,可以在声明中使用字符串文字,如下所示:
char s[] = "hello";
Run Code Online (Sandbox Code Playgroud)
或者像这样:
char *s = "hello";
Run Code Online (Sandbox Code Playgroud)
那么区别是什么呢?我想知道在编译和运行时的存储持续时间实际发生了什么.
我真的需要帮助.它已经动摇了我在C.Long的基础,我将非常感谢详细的答案.我把我的问题分成两部分.
答:为什么printf("%s",(char[]){'H','i','\0'});工作和打印Hi方式与传统方法printf("%s","Hi");一样?我们可以用(char[]){'H','i','\0'}它来代替"Hi"我们C代码中的任何地方吗?它们的含义是否相同?我的意思是,当我们用"Hi"C语言编写时,它通常意味着Hi存储在内存中的某个地方,传递给它的指针.可以说是看似丑陋的.(char[]){'H','i','\0'}他们完全一样吗?
B:当printf("%s",(char[]){'H','i','\0'})工作成功时,printf("%s","Hi")为什么然后printf("%s",(char*){'A','B','\0'}失败大时间和seg-fault如果我运行它尽管有警告?它让我感到惊讶,因为在C中,不char[]应该分解成char*,就像我们在函数参数中传递它一样,为什么它在这里没有这样做并且char*给出失败?我的意思是,不是char demo[]作为参数传递给功能相同char demo*?为什么结果在这里不相同?
请帮我解决这个问题.我觉得我还没有理解CI非常失望的基础知识.谢谢!