gpt4 book ai didi

c - 如何将字符串数组复制到空字符串数组

转载 作者:行者123 更新时间:2023-11-30 14:52:07 25 4
gpt4 key购买 nike

我一直在尝试复制一个名为 char* args[] 的字符串数组,其中包含基本的 shell 命令(例如 ls),并将其排序到另一个字符串数组 char* argsNew[] 中,但它无法正常工作。下面是我使用 strcpy 将一个数组字符串复制到另一个数组的代码.

 char *args[2]; //Let's say i had this as my original array
args[0] = "ls";
args[1] = "sort";
char *argsNew[2]; //ad don't place anything in argsNew
//shouldn't this work?
for(int k = 0; args[k] != '\0'; ++k)
{
strcpy(argsNew[k], args[k]);
printf("argsNew[%d] is %s\n", k, argsNew[l]);
}

当我执行此命令时 printf永远不会执行,导致我假设执行 strcpy 时出现错误命令。我正在使用strcpy错误地?有没有更好、更简单的方法来执行这样的任务?任何帮助将不胜感激。谢谢。

编辑:我在顶部添加了更多细节。感谢您的快速回复。

最佳答案

一种方法是这样做

char *args[3]; 
args[0] = "ls";
args[1] = "sort";
args[2] = NULL;
char *argsNew[2];
for(int k = 0; args[k] ; ++k)
{
argsNew[k] = strdup(args[k]);
printf("argsNew[%d] is %s\n", k, argsNew[k]);
}

首先,循环是错误的,您需要使其最后一个指针变量指向 NULL。(类似于传递给 char* []main() )。而且你之前没有指出任何可以复制的内存。您之前执行的操作正在调用未定义的行为。

早期解决方案的缺点是我们总是占用额外的空间。我们可以使用这个解决方案来避免这种情况。

这里我们使用 strdup 来获取分配的内存并将字符串复制到其中。并使用sizeof获取数组的长度。

循环也可以这样完成

for(int k = 0; k < sizeof args/sizeof args[0]; ++k)

代码就像这样

char *args[2]; 
args[0] = "ls";
args[1] = "sort";

size_t sz = sizeof args/sizeof args[0];
char *argsNew[sz];
for(size_t k = 0; k < sz ; ++k)
{
argsNew[k] = strdup(args[k]);
printf("argsNew[%d] is %s\n", k, argsNew[k]);
}

关于c - 如何将字符串数组复制到空字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47735819/

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