gpt4 book ai didi

c - strncpy 从 **char 到 *char[] 不复制最后一个元素

转载 作者:行者123 更新时间:2023-11-30 18:24:50 26 4
gpt4 key购买 nike

我正在尝试将 argv 的各个元素复制到第二个数组中。我正在使用 strncpy 来做到这一点。

这是一个复制该问题的精简版本。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
printf("%d\n", argc);
char *argvarray[argc];
int arrlen;

//int j;
for(int j=0; j< argc; j++){
arrlen = arrlen + strlen(argv[j]);
}

printf("size of argv: %d\n", arrlen); //see if size is right
strncpy(*argvarray, *argv, arrlen);

for(int j=0; j< argc; j++){
printf("value of j: %d\n", j); //to see what's going on
printf("%s\n", argv[j]);
printf("%s\n", argvarray[j]); //gets 1st element no problem
}

return 0;
}

如果我将 1 个 arg 传递给 main,它会将 argv 的第一个元素复制到 argvarray ,但不会复制第二个元素。如果我传递超过 1 个参数,它会在 strncpy() 上出现段错误。

为什么会发生这种情况?在事先不知道大小的情况下,将 char 数组(特别是在函数定义中声明的 char 数组)的所有元素复制到其他 char 数组(如 argv 的情况)的最佳方法是什么?

最佳答案

arrlen = arrlen + strlen(argv[j]);

arrlen 在未初始化的情况下使用(未定义的行为)。

正如 @PeterA.Schneider 所指出的,您需要为 argvarray 的每个元素提供空间,在 strncpy 之前使用 malloc >strdup

关于c - strncpy 从 **char 到 *char[] 不复制最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35506684/

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