使用较小的字符串初始化char数组
如果我写:
char arr[8] = "abc"; 有没有什么规定什么arr [4]可能是?我做了一些测试 void a() { char arr[8] = "abc"; /* breakpoint here,line 3 */ strcpy(arr,"1234567"); } int main() { a(); a(); return 0; } 调试器成绩单 Breakpoint 1,a () at str.c:3 3 char arr[8] = "abc"; (gdb) s Current language: auto; currently minimal 4 strcpy(arr,"1234567"); (gdb) p arr $1 = "abc 00 00 00 00" (gdb) c Continuing. Breakpoint 1,a () at str.c:3 3 char arr[8] = "abc"; (gdb) p arr $2 = "1234567" (gdb) s 4 strcpy(arr,"1234567"); (gdb) p arr $3 = "abc 00 00 00 00" 解决方法
这是标准行为.
arr [3]被初始化为0,因为终止0是字符串文字的一部分. 所有剩余元素都初始化为0 – ISO/IEC 9899:1999,6.7.8,21:
并且具有静态存储的char对象将初始化为0. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |