この例では、入力ファイルと出力ファイルを取得します。入力ファイルには数字と 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;
}