我一直在尝试复制一个名为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
了吗?有没有更好更简单的方法来执行这样的任务?真的很感激任何帮助。谢谢。
编辑: 我在顶部添加了更多细节。感谢您的快速回复。
答案 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]);
}