gcc 4.4.4 c89
Я использую следующий код для чтения в файле с помощью fgets. Я просто хочу получить пол, который может быть либо М, либо Ф.
Однако, поскольку пол всегда является последним символом в строке. Я думал, что смогу получить характер, используя strlen. Однако по какой-то причине я должен получить strlen и минус 2. Я знаю, что strlen не включает nul. Тем не менее, он будет включать возврат каретки.
Точная строка текста, в котором я читаю, такова:
"Low, Lisa" 35 F
Мой код:
int read_char(FILE *fp)
{
#define STRING_SIZE 30
char temp[STRING_SIZE] = {0};
int len = 0;
fgets(temp, STRING_SIZE, fp);
if(temp == NULL) {
fprintf(stderr, "Text file corrupted\n");
return FALSE;
}
len = strlen(temp);
return temp[len - 2];
}
strlen возвращает 17, когда я чувствую, что должно вернуться 16. Длина строки, включая возврат каретки. Я чувствую, что должен делать - 1 вместо - 2.
Любые предложения, если вы понимаете мой вопрос.
Спасибо
EDIT:
fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops
after an EOF or a newline. If a newline is read, it is stored into the buffer. A '\0' is stored after the last character in the
buffer
Таким образом, буфер будет содержать:
"Low, Lisa" 35 F\0\r
Что вернет 17 из strlen, если он включает \ r? Правильно ли я так думаю?