如果未宣告為常量,則宣告指向字串文字的指標陣列是否有任何負面影響?
我正在設定一個可以具有不同長度的字串陣列。如果我將它們設定為指向字串文字的指標陣列,一切似乎都可以正常作業,我什至可以稍后更改它們。我只是想確定這是最好的方法,然后再在更大規模的嵌入式程式中繼續使用它。
- 這個簡單的例子是否有任何負面影響可能會丟失?
- 將其宣告為具有最大長度的二維字符陣列是否有任何優勢?
例子:
#include <stdio.h>
char * OutputNames[20] =
{
"Output 01",
"Output 02",
"Output 03",
"Output 04",
"Output 05",
"Output 06",
"Output 07",
"Output 08",
"Output 09",
"Output 10",
"Output 11",
"Output 12",
"Output 13",
"Output 14",
"Output 15",
"Output 16",
"Output 17",
"Output 18",
"Output 19",
"Output 20",
};
char main()
{
OutputNames[12] = "Test Output";
for (unsigned char ArrMem = 0; ArrMem < 20; ArrMem)
{
printf("%s\n", OutputNames[ArrMem]);
}
getchar();
return (0);
}
uj5u.com熱心網友回復:
C 中的字串文字是只讀的(即使它們的型別實際上是char []),因此最好將陣列定義為:
const char * OutputNames[] =
{
...
};
請注意,這意味著指標指向的是const,而不是指標本身。另外,請注意,陣列長度被排除在外,因此大小可以由初始化程式指定。
uj5u.com熱心網友回復:
不,這將是我存盤具有不同長度的字串集合的首選方式。
所需的記憶體量要多一點,因為您還存盤了所有指標。但是如果你創建一個二維陣列,你會浪費更多的記憶體,因為每個字串都需要足夠的空間來容納最長的字串。
您需要擔心的主要問題是釋放所有記憶體,但由于您使用的是字串常量,因此這不是問題。我會讓陣列 a const.
uj5u.com熱心網友回復:
主要的危險是您可能會意外地嘗試更改字串文字之一(可能在某些呼叫鏈中傳遞指標的深處;難以除錯)導致未定義的行為。省去頭疼的麻煩,并將它們宣告為常量:
const char *OutputNames[20] = ...
請注意,這不會將 ARRAY 宣告為常量,而只是將指向的字串宣告為常量。因此,您仍然可以更改陣列的任何元素(使其指向不同的字串)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338856.html
標籤:C
上一篇:分期付款計算功能
