gpt4 book ai didi

C strcpy 字符串指针数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:59:10 26 4
gpt4 key购买 nike

我有一个这样声明的数组:

char *array[4];

由带有字符串的不同函数填充,即 ["one", "two", "three", "four"]。

我的目标是将这个数组复制到一个新数组中,不包括最后两个元素,因此 new_array 将包含 ["one", "two"]。

这是我目前尝试过的:

int *new_array[2];

for (int i = 0; i < 2; i++){
strncpy(new_array[i], array[i], strlen(array[i]));
}

但是却收到如下警告:

warning: passing argument 1 of ‘strncpy’ from incompatible pointer type [-Wincompatible-pointer-types]

note: expected ‘char * restrict’ but argument is of type ‘int *’

extern char *strncpy (char *__restrict __dest,

最佳答案

你的代码有一些问题

首先,它声明了一个整数指针数组(因此出现了警告),然后这些指针没有被初始化。 strncpy 不是要调用的正确函数(即使内存已初始化,它也不会以 null 终止字符串),您需要 strdup 来执行正确的操作分配&拷贝:

char *new_array[2];

for (int i = 0; i < 2; i++){
new_array[i] = strdup(array[i]);
}

(在某些旧系统上,strdup 可能不可用。如果您遇到这种情况,只需使用 new_array[i] = malloc(strlen(array[i]+1 )); 然后 strcpy(new_array[i],array[i]);)

这两种方法都分配动态内存,并且在不再使用时需要free

但是如果您只想存储指针,例如因为array 包含文字 而您不打算修改您的字符串,您可以只复制指针:

new_array[i] = array[i];

关于C strcpy 字符串指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47477348/

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