c - 是 char str1[] = {'s','t','r','i','n','g','\0'} 从常量内存段复制到堆栈,如 char str2[] = "细绳”?
问题描述
我知道如果使用下一种语法char str1[] = "string"
,“字符串”会保存在常量段中并复制到堆栈中(printf("%p", str1)
显示堆栈的地址)。我想知道是否char str2[] = {'s','t','r','i','n','g','\0'}
与 相同的过程char str1[] = "string"
,或者只是保存在堆栈中(printf("%p", str2)
显示堆栈的地址)。
解决方案
这些声明的副作用
char str2[] = {'s','t','r','i','n','g','\0'};
和
char str1[] = "string";
是不同的。
注意最后的初始化可以写成例如
char str1[] = "str" "ing";
在最后一种情况下(C 标准,6.4.5 字符串文字)
6 在翻译阶段 7,一个字节或值为零的代码被附加到每个由一个或多个字符串文字产生的多字节字符序列。78) 然后使用多字节字符序列初始化一个静态存储持续时间和长度刚好足够的数组包含序列...
在第一种情况下,具有静态存储持续时间的字符数组都不是从用作初始值设定项的单独字符创建的。
推荐阅读
- curl - 我想用 nexmo cURL 发送多条短信
- python - Google BigQuery:带有目标表的 SELECT 将字段模式覆盖为 NULLABLE
- php - 我想在我的数据库中添加一个颜色值,用于显示可用性
- django - django transaction.non_atomic 在管理脚本中有效吗?
- python - odoo 12. 附加文件
- android - 如何使用 React Native Share API 共享 App 链接?
- mysql - 我想要列 sql 中连续日期行之间的差异
- bash - bash命令在file2中的特定字符串/文本之后将文件内容从file1复制到file2
- c++ - 如何使用 LDAP 和 C++ 获取本地 Windows 组中的成员
- c# - 显示以 blob 格式保存的文档