c - 需要帮助查找 C 程序中的错误(与 char** 复制相关)

标签 c

我尝试了将 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/

相关文章:

c - 同样简单的计算,不同的结果

c - 由于带有字符的输入函数 (scanf()) 存在一些问题,while 循环中的条件表达式出现奇怪的行为

c - 替代 Linux 上的 backtrace() 可以找到静态函数的符号

c - 将c中的.csv文件读入多个变量

c - strcmp 如何在没有 * 运算符的情况下比较地址处的值?

c# - 如何在 C# 应用程序中使用 extern "C"dll 函数以 char** 作为参数?

c - 是否允许 C 编译器优化对未分配内存的访问?

c - 用 C 将结构写入文件的可移植方法是什么?

objective-c - c中的模拟器/生成的switch语句范围

c - 关于矩阵的动态分配