Где вы взяли, что int32_t - это псевдоним int?
При компиляции на другую архитектуру внезапно может оказаться, что int32_t - нифига не псевдоним к int.
#include <string.h>
for (char buffer [ 100 ] = { 0 }; fgets ( buffer, 100, file ) != NULL; ) {
char* p;
if ((p = strchr ( buffer, '\n' )) != '\0') {
*p = NULL;
}
}
for (char buffer [ 100 ] = { 0 }; EOF != (fscanf_s(file, "%[^\n]%*c", buffer, 100)); ) {
for (char buffer [ 100 ] = { 0 }; EOF != fscanf_s ( file, "%[^\n]\n", buffer, 100 ); ) { // [^\n] читать всё и остановиться на \n ; \n пропустить \n
. int custom_read ( FILE* file, char* buffer, int size ) {
int i = 0;
for (int c; (EOF != (c = fgetc ( file ))) && (i < size-1) && c != '\n'; ++i) {
buffer [ i ] = c;
}
if (i) {
buffer [ i ] = '\0';
}
return i;
}
Если вам не нужно "зависать" на символе, то используйте другой формат, например %c, %s (симолы/строки)
Вообще читать errno надо, только если fopen вернул NULL. При нормальном завершении errno не меняется.
fopen_s ( &file, "file.txt", "r+" );
errno = fopen_s ( &file, "file.txt", "r+" );
#include <stdio.h>
#include <errno.h>
void test1 () {
FILE* pFile;
int er;
pFile = fopen ( "file1.txt", "w+" );
er = errno;
perror ( "?" ); // ? : invalid argument
fclose ( pFile );
}
void test2 () {
FILE* pFile;
int er;
pFile = fopen ( "file2.txt", "r+" );
er = errno;
perror ( "?" ); // ? : Invalid argument
fclose ( pFile );
}
int main ( void ) {
test1 ();
test2 ();
return 0;
}