首页 > 解决方案 > 将 char 变量存储在 C 中的其他 char 变量中

问题描述

我正在尝试执行以下操作,使用其他 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"}};

你能解释一下为什么我写的第一件事是无效的。如果我的问题有解决方案。

谢谢。

标签: arrayscinitializationdeclarationc-strings

解决方案


要回答您的问题,您的解决方案都不正确,您不能像这样初始化二维字符数组。

如果它不是可变大小的数组,则第二个选项将是有效的,

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);

推荐阅读