2

このコードは、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);
} 

デバッグの結果

--------------------------- Microsoft Visual C++ デバッグ ライブラリ-----------

デバッグ アサーションに失敗しました!

プログラム: ...\documents\visual studio 2010\Projects\bfa\Debug\bfa.exe ファイル: f:\dd\vctools\crt_bld\self_x86\crt\src\fgets.c 行: 57

式: ( str != NULL )

プログラムがどのようにアサーション エラーを引き起こすかについては、アサートに関する Visual C++ のドキュメントを参照してください。

(アプリケーションをデバッグするには、[再試行] を押します)

--------------------------- 中止 再試行 無視

私が得る errno は 2 です。

4

2 に答える 2

5

私の推測では、ファイルを開くことができず、まだ fgets に渡しています。if(rd==NULL) は、null の場合、fgets の実行を停止せず、メッセージを出力して実行を続行します。

非常に基本的なエラー処理:

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);
}
于 2011-12-26T08:46:08.037 に答える