Для начала, вы не инициализируете char_index
, то есть, скорее всего, в нем будет мусор.Если вы не инициализируете его, ваша программа добавит неизвестное число к указателю current_line
.
int char_index = 0; /* initialize to 0 */
Во-вторых, немного более "естественный" синтаксис будет:
current_line[char_index] = ...
В-третьих, вы можете проверить символы, не используя их целочисленные эквиваленты:
if (ch == '\n') {
/* this is the same as "ch == 10" */
В-четвертых, вы должны закрыть открытый файл перед выходом из процедуры:
fclose(fp);
Наконец, яЯ не уверен, что ch == 13
('\r'
) и continue
предназначены для обработки, поскольку continue
фактически не используется, но вы, вероятно, не хотите копировать его в данные:
if (ch != '\r') {
current_line[char_index] = ch;
char_index++;
/* or on one line: current_line[char_index++] = ch; */
}
Кроме того, мощной особенностью C (и многих других языков) является оператор switch
:
/* substitutes your if...elseif...else */
switch (ch) {
case '\n':
current_line[char_index] = '\0';
char_index = 0;
iniFileData[final_line_num++] = current_line;
break; /* <-- very important, C allows switch cases to fall thru */
case '\r':
/* do nothing */
break;
default:
/* any character that is not a newline or linefeed */
current_line[char_index++] = ch;
break;
}