簡體   English   中英

如何初始化雙指針字符數組,如下所示?

[英]How to Intialise on double pointer char array like below?

我正在搜索初始化 char 類型的數據,如下所示。 但我不確定如何做到這一點

char* data[ ][ ] = { 
          {"", "index1", "clock1", "Rate1"}, 
          {"", "index2", "clock2", "Rate2"},
          {"", "index3", "clock3", "Rate3"},
          {"", "index4", "clock4", "Rate4"}
}

這樣當我想將上表的數據分配給其他變量時,如下所示

for( int i = 0; i < 6; i++)
{
  char k[][];
  for(int j = 0; j < 6; j++ )
   {
      k[i][j] = data[i][j];
   }

} 

我的預期輸出是這樣的

k[i][1] = "index1", k[i][2] = "clock1", k[i][3] = "Rate1"
k[i+1][1] = "index2", k[i+1][2] = "clock2", k[i+1][3] = "Rate2" etc.,

我怎樣才能像上面那樣初始化變量數據以獲得輸出中提到的值?

k賦值循環中需要注意的幾件事。 當數據中定義的數組邊界為 0-3(4 個元素)時,您將循環 0-6。 您在 for 循環中初始化了k k將需要邊界,因為它沒有被初始化。 請記住,C 中的數組具有固定大小。 這是我所指的代碼:

for( int i = 0; i < 6; i++)
{
  char k[][]; /* Re-initialize here? */
  for(int j = 0; j < 6; j++ )
   {
      k[i][j] = data[i][j];
   }
} 

k需要使用如下邊界進行初始化:

char* k[4][4];

此外,您對數據的分配並沒有按照您的想法進行。 你想像這樣初始化它:

char* data[4][4] = {
          {{""}, {"index1"}, {"clock1"}, {"Rate1"}},
          {{""}, {"index2"}, {"clock2"}, {"Rate2"}},
          {{""}, {"index3"}, {"clock3"}, {"Rate3"}},
          {{""}, {"index4"}, {"clock4"}, {"Rate4"}}
};

但實際上,這也不會很有幫助,因為正如我上面所說,數組的大小是固定的。 元素data[0][x]都是 char 的單元素數組。 他們將毫無用處。 我認為您想為它們分配不同的字符串。 分配/訪問data[0][x][y]其中y大於 0 將是未定義的行為。 看起來您在這里真正需要的是可變長度字符串。 由於您使用 C++ 標記了這個問題,因此一個簡單的 C++ 解決方案是在此處使用std::string 如果你真的需要在 C 中完全可變長度的字符串,你將需要使用動態內存分配。 對於一個更簡單的方法,這將是更好地分配data以固定字符串大小。 稍后,如果您想分配不同的字符串,您將需要使用strcpy

下面為您提供解決方案。 我使用 20 作為固定字符串大小。 您可能需要更多空間。

#include<stdio.h>

int main(int argc, char** argv)
{
    char data[4][4][20] = {
          {{""}, {"index1"}, {"clock1"}, {"Rate1"}},
          {{""}, {"index2"}, {"clock2"}, {"Rate2"}},
          {{""}, {"index3"}, {"clock3"}, {"Rate3"}},
          {{""}, {"index4"}, {"clock4"}, {"Rate4"}}
    };

    int i;
    int j;
    char* k[4][4];
    for(i = 0; i < 4; i++)
        for(j = 0; j < 4; j++ )
            k[i][j] = data[i][j];

    for (i = 0; i < 4; ++i)
        for(j = 0; j < 4; ++j)
            printf("%s\n", k[i][j]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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