簡體   English   中英

如何更改 char *array[] 中的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM