1
A
回答
1
随着argc
是argv中元素的个数:
char** copy = (char**)malloc(argc * sizeof(char*)) ;
for (int i = 0; i < argc ; i++)
{
copy[i] = strdup(argv[i]) ;
}
释放分配的内存一旦我们与克隆完成后,作为练习留给读者。
0
这是我会怎么做:
- 分配
char*
S的argc
长度的数组。 - 使用
strlen
来确定每个元素的长度argv
并为每个元素分配足够的内存。请记得在strlen
返回的长度上加1,因为这会在每个字符串的末尾留出空字节空间。 - 使用
strcpy
每个值复制。 - 不要忘了
free
已分配的内存。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char ** argv)
{
char ** copy = malloc(argc * sizeof (char*));
int i;
size_t sz;
for (i = 0; i < argc; ++i) {
sz = strlen(argv[i]) + 1;
copy[i] = malloc(sz * sizeof (char));
strcpy(copy[i], argv[i]);
}
for (i = 0; i < argc; ++i) {
printf("%s\n", copy[i]);
}
for(i = 0; i < argc; ++i) free(copy[i]);
free(copy);
return 0;
}
0
作为argv
是NULL
封端的指针阵列有不需要使用argc
在所有。
#define _GNU_SOURCE /* for strdup() */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int copy_argv(char *** pcopy, char ** argv)
{
int result = 0;
char ** copy = argv;
{
while (*copy)
{
++copy;
}
copy = (*pcopy) = malloc((copy - argv + 1) * sizeof (*copy));
}
if (NULL == copy)
{
result = -1;
goto lblExit;
}
while (*argv)
{
*copy = strdup(*argv);
if (NULL == *copy)
{
result = -1;
/* Clean up. */
while (copy > *pcopy)
{
--copy;
free(*copy);
}
free(*pcopy);
*pcopy = NULL;
goto lblExit;
}
++copy;
++argv;
}
*copy = NULL;
lblExit:
return result;
}
使用方法如下:
int main(int argc, char ** argv)
{
char ** copy = NULL;
if (-1 == copy_argv(©, argv))
{
perror("copy_argv() failed");
}
else
{
/* Use copy here. */
}
}
相关问题
- 1. 复制char *到另一个char []
- 2. Arduino - 如何将char *复制到char **中?
- 3. 如何将char * a []复制到char ** b?
- 4. C++ - char ** argv与char * argv []
- 5. 复制char到char *
- 6. 如何一个char *复制到一个char [] []
- 7. char * argv []
- 8. 如何将char数组插入到另一个char数组中?
- 9. 从char *复制到char arrray
- 10. 如何使用char ** argv的
- 11. 将字符串从argv复制到C中的char数组中
- 12. 将char转换为char无效* - 将字符串数组中的char复制到另一个字符串数组
- 13. 将char数组的内容复制到另一个
- 14. 将argv复制到char数组时出错
- 15. 处理char ** argv
- 16. 如何将字节[]复制到char *中?
- 17. 将std :: string复制到char *
- 18. 如何将Thrust :: host_vector <char>复制到char *
- 19. 如何将char * argv []传递给pthread_create?
- 20. 将char * argv []转换为wstring
- 21. 如何将一个char *复制到C++中的字符中
- 22. C argv [2] ++ vs(char *)argv [2] ++?
- 23. 如何将char []中的几个字符复制到C中的char *?
- 24. 将char数组赋值给另一个char数组
- 25. spawnv调用数组的char(char * argv [])
- 26. 复制一个char **到另一个字符**(C)
- 27. 如何复制一个const值为unsigned char * type的值?
- 28. 复制char到char数组反向
- 29. 如何“重新定义”一个char *为另一个char *?
- 30. 如何正确地将std :: string的值复制到char []?
看一看'strcpy':http://www.cplusplus.com/reference/cstring/strcpy/ – CompuChip
提示:尝试'memcpy'或'strcpy'。 – herohuyongtao
函数'memcpy'可能是一个好的开始。 – Aliou