[英]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
限定符作為安全措施的原因。
如果這些約束都不適合您,則需要使用strcpy
、 strncpy
或更好的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 };
一些備注:
sizeof char
因為它是定義1
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.