gpt4 book ai didi

C "string"init - 哪个更好?

转载 作者:行者123 更新时间:2023-12-04 10:55:00 25 4
gpt4 key购买 nike

这两个初始化有什么区别?

char a[] = "string literal";

char *p = "string literal";

最佳答案

虽然这两者看起来很相似并且经常互换使用,但它们的含义确实不同。第一行:

char a[] = "string literal"; 

... 创建一个足够大的数组来容纳字符串文字,包括它的 NUL 终止符。它使用您指定的字符串文字初始化此数组。这个版本的一个好处是数组可以在以后修改。此外,即使在编译时数组的大小也是已知的,因此您可以使用 sizeof 运算符来确定其大小。例如:

printf("%u\n",unsigned(sizeof(a))); // Will display 15, which is the array's size 
// including the NUL terminator

第二行:

char *p  = "string literal"; 

... 只是设置一个指向字符串文字的指针。这比第一个版本快,但缺点是不应更改文字,因为它可能驻留在标记为只读的页面中。您还有一个缺点,即要知道字符串的长度,您需要使用 strlen() 函数,因为 sizeof 运算符只会给您大小指针变量。例如:

printf("%u\n",unsigned(sizeof(p))); // Will likely display 4 or 8, depending on
// whether this is a 32-bit or 64-bit build
printf("%u\n",unsigned(strlen(p))); // Will display the correct length of 14, not
// including the NUL terminator

至于哪个更好,这取决于您将如何处理这些变量。如果您不需要对字符串进行任何更改,请使用后者,但char * 更改为 const char *,这样您就不会不小心尝试更改所指向的字符。如果您打算更改数据,请使用以前基于数组的版本,它允许您在初始化后对数组进行更改。

关于C "string"init - 哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7893306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com