C – fopen () не работает (возвращает нулевой указатель)

Почему fopen () возвращает нулевой указатель?

Я пытаюсь сохранить параметры после BRIDGE и после LAN (соответственно 4 и 5) в cont_br и cont_lan, но fopen () не работает …

#include  #include  #include  #include  void read_file(char file[]) { char cont, *str, *ctrl_str; int x=0, cont_br, cont_lan; FILE *file_stream; if (file_stream = fopen(file, "r")) { while( !feof(file_stream) ) { //Check the file dimension fgetc( file_stream ); x++; } x--; str = (char*) malloc(sizeof(char) * x+1); fseek(file_stream, 0, SEEK_SET); // Return at the beginning of the file fread(str, x, 1, file_stream); char delims[] = "#"; char *result = NULL; result = strtok( str, delims); while (result != NULL) { if (result == "BRIDGE") { //Check the different "blocks" in the txt file result = strtok(NULL, delims); cont_br = atoi(result); printf("Number of bridges: %d\n", cont_br); } result = strtok(NULL, delims); if (result == "LAN") { result = strtok(NULL, delims); cont_lan = atoi(result); printf("Number of Lan: %d\n", cont_lan); } break; // } } printf("Error: can't open the file! errno: %d\n", errno); fclose(file_stream); } int main() { char file[] = "Config.txt"; read_file(file); return 0; } 

И это файл Config.txt:

 BRIDGE#4# LAN#5# 192.168.0.1 192.168.1.1 192.168.2.1 192.168.3.1 192.168.4.1 # LINK# B1:3000,L1 B1:3001,L2 B1:3002,L3 B2:3000,L4 B2:3001,L5 B3:3000,L1 B4:3000,L3 B5:3000,L2 B2:3002,L3 , BRIDGE#4# LAN#5# 192.168.0.1 192.168.1.1 192.168.2.1 192.168.3.1 192.168.4.1 # LINK# B1:3000,L1 B1:3001,L2 B1:3002,L3 B2:3000,L4 B2:3001,L5 B3:3000,L1 B4:3000,L3 B5:3000,L2 B2:3002,L3 

Всякий раз, когда fopen терпит неудачу, напечатайте номер ошибки ( errno ).

 #include  

Вы должны включить стандартный errno.h и напечатать значение error в вашем коде. Затем посмотрите код ошибки и найдите причину.

пример

 #include  #include  int main() { errno = 0; FILE *fb = fopen("/home/jeegar/filename", "r"); if (fb==NULL) { printf("Error %d \n", errno); printf("It's null"); } else printf("working"); } 

Таким образом, если fopen терпит неудачу, он установит номер ошибки. Вы можете найти эти списки номеров ошибок в fopen .