在这个 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;
}