我尝试了将 char** 复制到 char** 的不同方法,但一切似乎都不成功。这是我的代码:
void allocate(char ***words, unsigned long stringLength){
*words = malloc(sizeof(char*) * stringLength);
for (int i = 0; i < stringLength; i++)
(*words)[i] = malloc(stringLength);
}
int main(int argc, char **argv){
char **charArray;
allocate(&charArray, strlen(argv[2]));
int i, j;
for(i = 1; i < argc; i++){
argv++;
j = 0;
while((*argv)[j]){
(*charArray)[j] = (*argv)[j];
j++;
}
charArray++;
}
printf("%s\n", charArray[0]);
printf("%s\n", charArray[1]);
return 0;
}
打印语句不会从参数列表中打印正确的单词,看起来它打印了一些空格..我不知道为什么它不起作用。我不确定这是否是空间分配或指针运算的问题。我希望你能帮我解决这个问题。谢谢
最佳答案
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void allocate(char ***words, int argc, char **argv){
*words = malloc(sizeof(char*) * argc);
for (int i = 0; i < argc; i++)
(*words)[i] = malloc(strlen(argv[i])+1);
}
int main(int argc, char **argv){
char **charArray;
allocate(&charArray, argc-1, argv+1);
int i,j;
char **pp = charArray;
for(i = 1;i < argc; i++){
argv++;
j = 0;
while((*argv)[j]){
(*pp)[j] = (*argv)[j];
j++;
}
(*pp)[j] = '\0';
pp++;
}
printf("%s\n", charArray[0]);
printf("%s\n", charArray[1]);
for(int i=0; i < argc-1; ++i)
free(charArray[i]);
free(charArray);
return 0;
}
<小时/>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void makeCopyOfArgv(char ***words, int argc, char **argv){
*words = malloc(sizeof(char*) * argc);
for (int i = 0; i < argc; i++){
(*words)[i] = calloc(strlen(argv[i])+1, sizeof(char));
for(int j = 0; argv[i][j] ; j++)//use strcpy
(*words)[i][j] = argv[i][j];
}
}
int main(int argc, char **argv){
char **charArray;
makeCopyOfArgv(&charArray, argc-1, argv+1);
printf("%s\n", charArray[0]);
printf("%s\n", charArray[1]);
for(int i=0; i < argc-1; ++i)
free(charArray[i]);
free(charArray);
return 0;
}
关于c - 需要帮助查找 C 程序中的错误(与 char** 复制相关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25735815/