簡體   English   中英

將 char 變量存儲在 C 中的其他 char 變量中

[英]Store char variables in other char variables in C

我正在嘗試執行以下操作,使用其他 char 變量創建一個多字符數組。

char data_info_1[] = "Wellcome.";
char data_info_2[] = "Please";
char data_info_3[] = "If";

int size_line= sizeof(data_info_1)/sizeof(data_info_1[0]);

char data_info[3][size_line]={{data_info_1},{data_info_2},{data_info_3}};

一種解決方案是以下一種,但我對僅將字符串放在 data_info 變量中不感興趣

char data_info[3][size_line]={{"Wellcome"},{"Please"},{"If"}};

你能解釋一下為什么我寫的第一件事是無效的。 如果我的問題有解決方案。

謝謝。

要回答您的問題,您的解決方案都不正確,您無法像這樣初始化二維字符數組。

如果它不是可變大小的數組,則第二個選項將是有效的,

char data_info[3][10]={"Wellcome", "Please" ,"If"};
                   ^
            Valid -> fixed size

如果你有一個指針數組,像這樣的賦值是可能的:

char *data_info[] = {data_info_1, data_info_2, data_info_3}; //1

或者

const char *data_info[] = {"Wellcome", "Please", "If"}; //2

但這些可能不是您所需要的。

選項 1 將包含指向原始字符串的指針,通過這些指針對它們所做的任何更改都將反映在原始字符串中。

選項 2,指針是用字符串文字初始化的,並且不能更改,這就是我添加const限定符作為安全措施的原因。

如果這些約束都不適合您,則需要使用strcpystrncpy或更好的memcpy類的內容復制字符串:

#include <string.h>
//...
memcpy(data_info[0], data_info_1, sizeof data_info_1);
memcpy(data_info[1], data_info_2, sizeof data_info_2);
memcpy(data_info[2], data_info_3, sizeof data_info_3);

數組不能由數組初始化。 您可以像在此聲明中一樣使用字符串文字初始化字符數組

char data_info[3][size_line]={{"Wellcome"},{"Please"},{"If"}};

相對於您的情況,您可以聲明一個指向 char 的指針數組,例如

char * data_info[] = { data_info_1, data_info2, data_info3 };

一些備注:

  1. 你不需要除以sizeof char因為它是定義1
  2. 定義或初始化全局變量時只能使用常量表達式char data_info[3][sizeof(data_info_1)];

要將一個字符數組“存儲”在另一個字符數組中,您需要復制它。 初始化將不起作用,因為您無法分配數組。

#include <string.h>

char data_info_1[] = "Wellcome.";
char data_info_2[] = "Please";
char data_info_3[] = "If";

char data_info[3][sizeof(data_info_1)];

void foo(void)
{
    strcpy(data_info[0], data_info_1);
    strcpy(data_info[1], data_info_2);
    strcpy(data_info[2], data_info_3);
}

只能分配結構或聯合。 所以你可以將數組包裝到結構中,賦值或初始化將復制整個數組。

struct stringWR
{
    char str[50];
};

struct stringWR data_info_1 = {"Wellcome."};
struct stringWR data_info_2 = {"Please"};
struct stringWR data_info_3 = {"If"};

struct stringWR data_info[3];


void foo(void)
{
    data_info[0] = data_info_1;
    data_info[1] = data_info_1;
    data_info[2] = data_info_1;
}

void bar(void)
{
    struct stringWR data_info[3] = {data_info_1, data_info_2, data_info_2};
}

暫無
暫無

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

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