Waarom krijg ik een bewering die mislukt?

Deze code mislukt wanneer ik deze probeer te debuggen met VC2010:

char frd[32]="word-list.txt";
FILE *rd=fopen(frd,"r");
if(rd==NULL)
{
std::cout<<"Coudn't open file\t"<<frd;
exit(1);
}
char readLine[100]; 
while(fgets(readLine, 100, rd) != NULL)
{     
    readLine[strlen(readLine) - 1] = '\0'; 
    char *token = NULL; 
    token = strtok(readLine, " ,"); 
    insert(readLine);
} 

Foutopsporing resulteert in

————————– Microsoft Visual C++ Debug Library———–

Bewering foutopsporing mislukt!

Programma: …\documents\visual studio 2010\Projects\bfa\Debug\bfa.exe
Bestand: f:\dd\vctools\crt_bld\self_x86\crt\src\fgets.c Regel: 57

Uitdrukking: ( str != NULL )

Voor informatie over hoe uw programma een beweringfout kan veroorzaken,
zie de Visual C++-documentatie over beweringen.

(Druk op Opnieuw om de toepassing te debuggen)

————————— Afbreken Opnieuw Negeren

De fout die ik krijg is 2;


Antwoord 1, autoriteit 100%

Mijn gok is dat het bestand niet kan worden geopend en dat je het nog steeds doorgeeft aan fgets. Uw if(rd==NULL) stopt de uitvoering van de fgets niet als deze null is, het drukt gewoon een bericht af en gaat verder met de uitvoering.

Enkele zeer basale foutafhandeling:

const char* frd = "word-list.txt";
FILE *rd=fopen(frd,"r");
if(rd==NULL) {
    std::cout<<"Coudn't open file"<<endl;
    return 1;
}
char readLine[100]; 
while(fgets(readLine, 100, rd) != NULL)
{     
    readLine[strlen(readLine) - 1] = '\0'; 
    char *token = NULL; 
    token = strtok(readLine, " ,"); 
    insert(readLine);
}

Antwoord 2

Ik had deze fout en Johannes is goed wat er is gebeurd was mijn anti-virus corrupte sommige bestanden van de AP I verving ze en het probleem opgelost.

Other episodes