0

在这个 exrecie 我得到一个输入和输出文件。输入文件包含一个数字,然后是一个长度不超过 10 的字符串,我需要对它们进行排序并将它们输出到输出文件中。我定义了一个char** arrStr包含所有大小最多为 10 的字符串。

我试图了解以下代码是否可以工作(由于某种原因我无法在 Eclipse 上运行它)我主要关心的是正确复制字符串而不丢失信息。我写了一张纸条“这样可以吗?” 在我最关心的声明旁边,如果有任何其他更正,我将不胜感激。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

int comp(const void* p1, const void* p2) {
    return strcmp((char*)p1, (char*) p2);
} 

int main(int argc, char** argv) {
    FILE* fin;
    FILE* fout;
    int N;
    char** arrStr;
    char str[11];
    int i;

    if (argc!=3) {
        printf("Please enter the program's name and two paths");
        assert(0);
    }

    fin=fopen(argv[1], "r");
    if (fin==NULL) {
        printf("path 1 is not valid");
        assert(0);
    }

    fout=fopen(argv[2], "w");
    if (fout==NULL) {
        printf("path for file 2 is not valid");
        fclose(fin);
        assert(0);
    }

    fscanf(fin, "%d", &N); 
    arrStr=(char**)calloc(N, sizeof(char)*11);
    for (i=0; i<N; i++) { 
        fscanf(fin, "%s", str);
        strcpy(arrStr[i], str);  /*is it ok?*/
    }

    qsort(arrStr, N, sizeof(char)*11, comp);
    for (i=0; i<N; i++) {
        if (i==N-1)
            fprintf(fout, "%s", arrStr[i]);
        else
            fprintf(fout, "%s,", arrStr[i]);

    }
    fclose(fin);
    free(arrStr);
    fclose(fout);
    return 1;
}
4

1 回答 1

0

线

strcpy(arrStr[i], str);  /*is it ok?*/

不行。_ 你复制到一个NULL指针。

对于这种情况,请使用 egstrdup而不是strcpy

arrStr[i] = strdup(str);

不要忘记稍后释放这个字符串。

您还错误地分配了数组:

arrStr=(char**)calloc(N, sizeof(char)*11);

这不会分配字符串数组,而是分配N * 11字节。改成:

arrStr = calloc(N, sizeof(char *));
于 2012-09-18T10:34:48.930 回答