更新:文字列をで適切に初期化char string[sizeof buffer - 1]
することでクラッシュの問題は解決しましたが、複数の句読点があることがそれと何の関係があるのかについてはまだ興味があります!
「テキスト」の形式でファイルから文字列を読み取ろうとしています。sscanf
これまでのところ、パターンでの使用\"%[^\"]\"
は完璧に機能しましたが、文字列に句読点を追加し始めるとすぐに、プログラムがクラッシュし始めました。
エラーは、句読点が何であるか、またはマークの位置に関係なく、複数の句読点が使用されている場合にのみ発生するようです。また、ファイル内の句読点のある行の位置に関係なく発生します(つまり、最後の行に句読点がない場合でも、エラーが発生します)。
とにかく、以下は私がこれまでに持っているコードです:
char* func(char* f_name);
FILE* file = get_file(f_name,"r"); // a short function I wrote to get the
// file pointer from the current
// directory. The error is almost
// certainly not here.
if (file == 0) {
print("Unable to load file\nExiting...");
exit(-1);
}
char* pattern = "\"%[^\"]\"";
int read_args = -1;
char* string; // string size is unknown until read
char buffer[1200]; // i expect very long line of data in the file
while ( fgets( buffer, sizeof(buffer), file ) != NULL ) {
printf("found line: %s\n",buffer);
read_args = sscanf(buffer, pattern, string);
printf("num args: %d\n",read_args);
printf("read value: %s\n", string);
}
fclose(file);
return string;
}
以下は私が試したいくつかのデータです。「失敗」とマークされている場合、プログラムはコンパイルされ、すべてが実行され、終了する直前にクラッシュします。
"test test test" // successful
"test, test test" // successful
"test test; test" // successful
"test, test, test" // unsuccessful
"test; test. test," // unsuccessful
%d \"%[^\"]\" \"%[^\"]\"
この問題が解決され、このエラーが発生する前にパターンを使用してデータを正常に読み取っていた場合は、より複雑なパターンを使用する予定です。回答をよろしくお願いします。