파일을 읽을 때 매우 긴 줄에 동적으로 메모리를 할당하는 방법을 배우려고합니다. 나는 여기와 웹에서 검색하고 몇 가지 코드를 시도했다. 내가 파일을 읽을 때동적으로 텍스트 파일에서 한 줄 읽음
char line[256];
file = fopen(inputFileName, "r");
// Here, of course I checked file is opened or not.
while (fgets(line, sizeof(line), file)) {
// do some operations
}
// Closing operations
이 나를 위해 작동합니다
첫째, 여기 내 첫 번째 비 동적 코드입니다. 그러나 여기에 선은 255 자 이하 여야합니다. 그래서 예를 들어 300 자 길이의 파일을 파일에서 읽으 려합니다. 나는 다음 코드를 시도 :size_t maxl = 256;
//char line[256];
char *line = malloc(maxl * sizeof(char));
if(!line){
printf("Memory not allocated!!\n");
return -2;
}
file = fopen(inputFileName, "r");
while (fgets(line, sizeof(line), file)) {
while(line[strlen(line) - 1] != '\n' || line[strlen(line) - 1] != '\r'){
char *tmp = realloc (line, 2 * maxl);
//fgets(line, sizeof(line), file);
if (tmp) {
line = tmp;
maxl *= 2;
}
else{
printf("Not enough memory for this line!!\n");
return -3;
}
}
// do some operations
}
난 사실이 질문에 대한 답 구현하기 위해 노력 : Reading a line from file in C, dynamically
를하지만 항상 코드의 "메모리가 부족합니다"부분을 입력합니다. 그래서 내가 뭘 잘못하고 있니?
답장을 보내 주시면 감사하겠습니다.
편집 : 코드는 첫 번째 의견에 따라 달라집니다.
편집 2 : 코드는 항상 파일에서 3 자로 읽습니다.
파일 같은 것을 상상해abcdabcdabcd...
line
변수도 재 할당 작업 후 "ABC"항상.
'while' 루프는 그 안에있는 파일에서 새 텍스트를 읽는 경우에만 종료되지만 사용자는 그렇지 않습니다. – Ryan
가능한 [sizeof '(배열을 가리키는 포인터)를 찾는 방법?] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to -an-array) –
'sizeof (char *)'틀렸어. 'char *'의 배열을 할당하고 있습니까? 아니요. –