Я новичок в C, это мой первый проект, и я учил сам.В моей программе одна из моих функций должна прочитать строку из файла и сохранить ее в массиве символов.Когда я отслеживаю программу с помощью gdb, массив (строка []) - это просто нули.Это приводит к тому, что моя программа возвращает ошибку «Ошибка: в строке файла ресурсов отсутствует разделитель«: »\ n». Вот мой код:
//return the line number (0 based) that the cmd is on, -1 if absent
int locateCmd(char cmd[]) {
int lineIndex = -1; //-1, because lineIndex is incramented before the posible return
char cmdTemp[10] = "\0";
//create a compareable cmd with correct cmd that has its remaining values zeroed out
char cmdCmp[10] = "\0";
memset(cmdCmp, 0, sizeof(cmdCmp));
for (int i = 0; i < strlen(cmd); i++) {
cmdCmp[i] = cmd[i];
}
FILE *file = fopen(ASSET_FILE, "r");
//loop until target line is reached
while (strcmp(cmdTemp, cmdCmp) != 0) {
//check if last line is read
if (lineIndex == lineCounter(file)-1) {
return -1;
}
memset(cmdTemp, 0, sizeof(cmdTemp));
char line[61];
fgets(line, 61, file);
//set cmdTemp to the command on current line
lineIndex++;
for (int i = 0; line[i] != ':'; i++) {
cmdTemp[i] = line[i];
//return error if line doesn't contain a ':'
if (line[i] = '\n') {
printf("Error: a line in the asset file lacks a ':' separator\n");
exit(1);
}
}
}
return lineIndex;
}
В некотором контексте этой функции передается команда,и его задача - прочитать документ, который выглядит следующим образом:
command:aBunchOfInfoOnTheComand
anotherCommand:aBunchOfInfoOnTheComand
и выбрать строку, в которой хранится переданная команда (cmd []).
Проблема связана сfgets в строке 24. Я разделил соответствующую часть этого кода на небольшую тестовую программу, и она отлично работает.Тестовая программа, которая работает:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[]) {
FILE *file = fopen("tutorInfo.txt", "r");
char line[61];
fgets(line, 61, file);
printf("%s\n", line);
}
Правильное выполнение моей тестовой программы приводит меня к убеждению, что причиной этого является другой код в моей функции, но я не уверен, что именно.Может быть важно отметить, что проблемный код имеет тот же импорт, что и мой пример программы.Любая помощь будет высоко ценится.