【发布时间】:2015-06-04 21:11:32
【问题描述】:
我最近开始尝试学习 C 编程语言。在我的第一个程序(简单的 hello world 事情)中,当我意识到我不能只做 variable_name = "string data" 后,我遇到了声明字符串的不同方法:
char *variable_name = "data"
char variable_name[] = "data"
char variable_name[5] = "data"
我不明白的是它们之间的区别。我知道它们是不同的,其中一个专门分配了一定量的内存来存储数据,但仅此而已,我觉得在转向 C 中更复杂的概念之前,我需要彻底理解这一点。
另外,为什么使用*variable_name 可以让我将变量名重新分配给一个新字符串,而variable_name[number] 或variable_name[] 不能?当然,如果我为其分配 10 个字节 (char variable_name[10] = "data") 并尝试将其重新分配给 10 个字节或更小的内容,它应该可以工作,那为什么不呢?
空括号和星号在做什么?
【问题讨论】:
-
阅读@hacks 建议的链接后,您可能需要查看the section on strings。
-
不要误以为
char name[10]创建了一个包含 10 个字符的小盒子,您无法将较大的字符串复制到其中。你可以,而且你只会在很久以后才会遭受可怕的后果。 -
感谢您的链接和@lister,您介意清楚您在说什么吗?那句话并没有真正告诉我任何技术问题
-
@Linux_Noob 这与试图将超过 10 件物品放入一个显然只能容纳您放入其中的 10 件物品的盒子里没有什么不同。该盒子可能会破裂,或者内容可能会从未关闭的盒子顶部溢出。同样,当您尝试复制超过 10 个字符时,您的程序可能会崩溃,或者在复制操作以某种方式成功后,它可能会出现异常行为(崩溃、按预期运行等)。