.txt 파일에서 여러 개의 이름을 읽고 배열로 복사하려고합니다. 그런 다음 qsort()를 사용하여 배열을 정렬하려고합니다. 또한, 내가 읽고있는 파일은 Project Euler #22의 names.txt입니다. 다음은 코드입니다.qsort()는 하나의 문자열 배열을 정렬하지만 다른 하나는 segfaults입니다.
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
/* create a pointer to point to s */
char *strdup(char *s)
{
char *p;
p = (char *) malloc(strlen(s)+1);
if (p != NULL)
strcpy(p, s);
return p;
}
int compare(const void *a, const void *b)
{
const char *ap = *(const char **) a;
const char *bp = *(const char **) b;
return strcmp(ap, bp);
}
int main(void)
{
FILE *fp;
int c, i, j=0;
char name[100], *names[10000];
fp = fopen("names.txt", "r");
if (fp == NULL) {
printf("can't open file\n");
exit(0);
}
c = fgetc(fp); /* initialize c and skip first quotation mark */
while (c != EOF) { /* loop until no names are left */
i = 0;
while ((c=fgetc(fp)) != '"') /* copy chars to name until " is reached */
name[i++] = c;
name[i] = '\0';
names[j++] = strdup(name);
fgetc(fp); /* skip comma */
c = fgetc(fp);
}
size_t size = sizeof(names[0]);
size_t count = sizeof(names)/size;
qsort((void **) names, count, size, &compare);
return 0;
}
이름 배열을 정렬하려고하면 segfault가 발생합니다. 때문에 내 배열 "이름"의 오류로
char *test[] = { "FOO", "BAR", "TEST" };
size_t size = sizeof(test[0]);
size_t count = sizeof(test)/size;
qsort((void **) test, count, size, &compare);
for (i = 0; i < 3; ++i)
printf("%s\n", test[i]);
return 0;
내가 세그멘트 폴트가 의심하지만 루프의 경우를 통해 인쇄 : 내가 대신 명시 적으로 선언 된 문자열의 배열을 정렬하려고 할 경우, 작동 그것을 정렬하기 전에 "이름"의 각 요소는 문제없이 그렇게합니다.
도움을 주시면 감사하겠습니다.
'카운트'를 출력하십시오. – alk