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

时间:2017-12-10 04:20:11

标签: c arrays string

我一直在尝试复制一个名为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了吗?有没有更好更简单的方法来执行这样的任务?真的很感激任何帮助。谢谢。

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

2 个答案:

答案 0 :(得分:2)

一种方法是

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* []的{​​{1}})。此外,您之前没有指出任何可以复制的内存。您之前的操作是调用未定义的行为。

早期解决方案的缺点是我们总是占用额外的空间。我们可以避免使用此解决方案。

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

也可以像这样进行循环

sizeof

代码就像

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

答案 1 :(得分:-1)

试试这个,可以解决问题

 for(int k = 0; args[k] != null; ++k)
    { 
      strcpy(argsNew[k], args[k]);
      printf("argsNew[%d] is %s\n", k, argsNew[k]);
    }