gpt4 book ai didi

将存储在 char 数组中的字符串部分复制到另一个数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:54:21 25 4
gpt4 key购买 nike

我想尝试将已经存储在一个字符串数组中的部分字符串复制到另一个空数组中。 (我认为称为 array of pointers to char arrays )

我想复制每个字符串的前 3 个字符并将它们存储在第二个数组中,然后打印出来 - 像这样

AAA
BBB
CCC
DDD
EEE
FFF

这是我的代码。

void main()
{

/*ARRAY 1*/
char *line1 = "AAAAA";
char *line2 = "BBBBB";
char *line3 = "CCCCC";
char *line4 = "DDDDD";
char *line5 = "EEEEE";
char *line6 = "FFFFF";


char *array1[6];

array1[0] = line1;
array1[1] = line2;
array1[2] = line3;
array1[3] = line4;
array1[4] = line5;
array1[5] = line6;


int i;

char *array_main[6];

for(i = 0; i<6 ; i++ ) {
array_main[i] = ("%*.*s\n",1,3,array1[i]);
printf("%s", array_main[i]);
printf("\n");
}
}

我需要在这里做一个 malloc 吗? (对于 array_main[i])据我所知,我基本上只是将特定字符的地址复制到 array_main 的元素。

编辑 - 抱歉,我应该更清楚一点,我想收集 array_main 中的字符串,然后在实际复制数据的循环之外按顺序打印它们。

最佳答案

您正在将指向静态声明的字符串的指针复制到一个数组中。理论上没问题。然而,您想要切断剩余的字符串,因此您需要为目标字符串准备内存,因为如果您写入字符串,您将调用未定义的行为。

这一行:

array_main[i] = ("%*.*s\n",1,3,array1[i]);

绝对不会做你想做的事。我认为这甚至不应该编译。

你遍历数组并 malloc 适当的字节大小 (3+1),然后复制你想要的字符串部分(不要忘记 0 字节在结束)。

所以它应该是这样的:

for(i = 0; i < 6; i++)
{
array_main[i] = malloc(4);
snprintf(array_main[i], 4, "%.3s", array[i]);
printf("%s\n", array_main[i]);
free(array_main[i]);
}

一个更简单的版本(具有不必要的内存开销)是这样的:

for(i = 0; i < 6; i++)
{
array_main[i] = strdup(array[i]);
array_main[i][3] = 0;
printf("%s\n", array_main[i]);
free(array_main[i]);
}

关于将存储在 char 数组中的字符串部分复制到另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18127216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com