Чувствуйте себя глупым, задавая этот вопрос, так как это должно быть легко, но я не могу понять, что случилось.Загрузить файл в Char * Array
void loadIniIntoMemory() {
FILE *fp ;
fp = fopen (iniFile, "r");
int ch;
int final_line_num = 0;
int char_index;
char* current_line = (char*) malloc(sizeof(char) * MAX_INI_LINE_LENGTH);
while((ch = fgetc(fp)) != EOF) {
if(ch == 10) {
// new line
*(current_line + char_index) = '\0';
char_index = 0;
iniFileData[final_line_num] = current_line;
final_line_num++;
} else {
// regular char
*(current_line + char_index) = ch; // CAN'T DO THIS, CRASH
char_index++;
if(ch == 13) {
// carriage return
continue;
}
}
}
}
было некоторое время, так как я сделал C, он выходит из строя на этой линии: *(current_line + char_index) = ch;
Спасибо за любую помощь.
--EDIT--
Кроме того, никто не заметил, что этот код не сохраняет последнюю строку. Вот полный, правильный рабочий код, который сохраняет файл в массив указателей.
void loadIniIntoMemory() {
FILE *fp ;
fp = fopen (iniFile, "r");
int ch;
final_line_num = 0;
int char_index = 0;
char* current_line = (char*) malloc(sizeof(char) * MAX_INI_LINE_LENGTH);
while((ch = fgetc(fp)) != EOF) {
if(ch == '\n') {
// new line
*(current_line + char_index) = '\0';
char_index = 0;
iniFileData[final_line_num] = current_line;
final_line_num++;
current_line = (char*) malloc(sizeof(char) * MAX_INI_LINE_LENGTH);
} else if(ch != '\r') {
// regular char
*(current_line + char_index) = ch;
char_index++;
}
}
iniFileData[final_line_num] = current_line;
fclose(fp);
}
-_- ничего себе, спасибо. Примите в секунду. – jn1kk
Спасибо за дополнительную информацию (ваше редактирование). Я собираюсь реализовать if (ch! = 13) и функцию close (fp). Я использовал только C для очень низкого уровня, то есть мой синтаксис немного отличается. – jn1kk