在c?
中初始化字符串数组的最佳方法是什么?我尝试过两件事
char arr[10] = "\0";
char arr1[10] = {"\0"};
初始化这些字符串后,我试图在gdb中显示,两者都给出了相同的初始化格式。
(gdb) p arr
$1 = "\000\000\000\000\000\000\000\000\000"
(gdb) p arr1
$2 = "\000\000\000\000\000\000\000\000\000"
(gdb)
我想知道哪个是最好的,哪些是优点和缺点。
代码: -
int main(){
char arr[10] = "\0";
char arr1[10] = {"\0"};
return 0;
}
装配: -
(gdb) disass main
Dump of assembler code for function main:
0x00000000004004ec <+0>: push %rbp
0x00000000004004ed <+1>: mov %rsp,%rbp
0x00000000004004f0 <+4>: movzwl 0xd5(%rip),%eax # 0x4005cc
0x00000000004004f7 <+11>: mov %ax,-0x10(%rbp)
0x00000000004004fb <+15>: movq $0x0,-0xe(%rbp)
0x0000000000400503 <+23>: movzwl 0xc2(%rip),%eax # 0x4005cc
0x000000000040050a <+30>: mov %ax,-0x20(%rbp)
0x000000000040050e <+34>: movq $0x0,-0x1e(%rbp)
0x0000000000400516 <+42>: mov $0x0,%eax
0x000000000040051b <+47>: pop %rbp
0x000000000040051c <+48>: retq
答案 0 :(得分:7)
两次初始化都完全等效。从标准:
字符类型数组可以由字符串初始化 文字或UTF-8字符串文字,可选择用大括号括起来。
答案 1 :(得分:3)
您的两次初始化是等效的。
除了你所展示的内容之外,还有几种方法可以初始化字符串(不仅是[]数组):
// fixed size, depending on the lenght of the string, no memory "wasted"
char arr1[] = "value";
// fixed array size, depends on a given number, some memory may be unused
char arr2[10] = "value";
// C-array type initialiation
char arr3[] = {'v','a','l','u','e','\0'};
// special string, should never be modified, need not be freed
char* str1 = "value";
// a dynamic string based on a constant value; has to be freed, but can be reallocated at will
char* str2 = strdup("value");
答案 2 :(得分:1)
char arr[10] = "\0";
和char arr1[10] = {"\0"};
相等。
答案 3 :(得分:1)
陈述
char arr[10] = "\0";
和
char arr1[10] = {"\0"};
完全相同。