-1

数値の最初の 2 桁を比較する関数を作成しようとしていますが、itoa を使用できないため、以前にグーグルで検索した sprintf を使用して、最初に数値を文字列に変換し、次に各桁を比較しています。奇妙な理由で、これを実行するとセグ フォールトが発生します。同じことを試しましたが、 strncmp("100", "101", 2) のような実際の文字列を使用しても問題はありません。問題は、何らかの形で str2 を台無しにする 2 つの sprintf ステートメントが原因です。なぜこれが起こっているのか、それを修正するために何ができるのかをどこにも見つけることができません。ここに投稿する前に、これに 2 時間を費やしました。可能であれば、いくつかの助けをいただければ幸いです

int exists;
int id1 = 100;
int id2 = 101;
char str1[12];
char str2[12];
sprintf(str1, "%d", id1);
sprintf(str2, "%d", id2);
exists = strncmp(str1,str2,2);
printf("Res is %d\n", exists);

編集: str1 と str2 の両方で printf を試しましたが、それぞれ 100 と 101 が表示されます。また、char配列を反復処理しようとしましたが、再びseg faultが発生しました。テストファイルを作成したときに実際に正常に実行でき、すべて実行されたため、完全に失われました

編集#2:コンテキストを追加するために、このプログラムには複数のファイルがあり、一部のライブラリは他のファイルに含まれています。すべてが #ifndef で適切に囲まれています。質問は、ファイルのコンパイルの順序によってこの問題が発生する可能性があるということですか?

4

3 に答える 3