6.321.078 레코드가있는 파일이 있는데 쉼표로 구분 된 몇 개의 정수로 구성됩니다. 내 목표는 한 줄씩 읽고 문자 배열 (문자열) 안에 저장하는 것입니다. 내 문제는 내가 실행할 때 sscanf()
작동하지 않는다는 것입니다. 이것이 문제라고 생각하지만 그게 유일한 것인지는 모르겠습니다. 파일에 INT가 포함되어 있음을 알고 있지만 문자열과 같은 모든 줄을 저장해야합니다. 내가 무엇을 할 수 있고 왜 작동하지 않습니까? ( 아래 에 내 file.csv 의 예가 있습니다)
main.c :
int main() {
FILE *fd;
char *arr;
arr = (char *)malloc(6321078);
for (int k = 0; k < 6321078; k++) {
arr[k] = calloc(20, sizeof(char));
}
char *r;
int pos = 0;
int n;
fd = fopen("file.csv", "r");
if (fd == NULL) {
perror("Error");
exit(1);
}
while (fgets(r, sizeof(r), fd) != NULL) {
sscanf(r, "%s", arr[pos]);
printf("%s", arr[pos]);
pos++;
}
}
file.csv의 예 :
20 배열에 대한 포인터를 사용할 수 있습니다. char (*arr)[20]
그런 다음 레코드 수에 대한 메모리를 할당합니다. 파일에서 각 레코드로 직접 읽는 데
사용 fgets
합니다.
완료되면 파일을 닫고 메모리를 비 웁니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 6321078
#define LEN 20
int main ( void) {
char (*arr)[LEN] = NULL;
int pos = 0;
FILE *fd = NULL;
if ( NULL == ( fd = fopen("file.csv", "r"))) {
perror("Error");
exit ( EXIT_FAILURE);
}
if ( NULL == ( arr = calloc ( SIZE, sizeof *arr))) {
fclose ( fd);
fprintf ( stderr, "calloc problem\n");
exit ( EXIT_FAILURE);
}
while ( pos < SIZE && fgets ( arr[pos], sizeof arr[pos], fd)) {
printf ( "%s", arr[pos]);
++pos;
}
fclose ( fd);
free ( arr);
return 0;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다