[英]How to change the value in char *array[]?
我有一個數組(數組),值在 another.h 文件中定義為 char 數組(LIST)。
char *Array[]= { "something1", "something2", "something3" };
LIST 在.h 文件中定義。
#define LIST {“a”, “b”, “c”}
如果我想將 Array 中的所有值更改為 LIST。 我應該怎么辦?
這里的問題是LIST
不存在任何你可以復制的東西,你需要先以某種方式實例化它,比如:
char* list[] = LIST;
然后你需要復制它,但你不知道它有多大,所以你又被卡住了。
更好的是:
#define LIST {"a" "b", "c", NULL}
現在你至少可以告訴哪里停止了。
您還可以定義一個global
const 或static
變量,具體取決於它的使用方式和頻率。 即使可以完成, #define
確實是這項工作最糟糕的工具。
至於分配,假設列表大小相同:
char** a = &array[0];
for (char** p = &list[0]; *p; ++p, ++array) {
*array = *p;
}
它將在哪里旋轉直到它碰到NULL
終結器。
作為@tadman 答案的替代方案,如果將char *Array[]
轉換為char **Array
,則可以使用復合文字。
這是一個例子:
#define LIST {"a", "b", "c"};
int main(void)
{
char **Array = (char *[3]) {"abc", "def", "ghi"};
Array = (char *[3]) LIST;
}
C99 標准中引入了復合文字,因此如果您使用的是舊版本,請不要嘗試使用它。 但是,如果您選擇將LIST
宏轉換為全局數組,那么復合文字將不起作用,因為它需要您使用大括號括起來的初始值設定項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.