-1

こんにちは私のコードは次のとおりです

char name[100] ;
_getcwd(name, (size_t)sizeOfFileName);
strcat(name,"\\") ;
strcat(name, fileName) ;
char *value_str= NULL ;
file = fopen(name, "a+");
if(!file)
   printf("bad file name") ;
for(i = 0; i<fileSize ; i++)
 {
  value_str = fp_to_str(ddata[i]) ;
  strLength= strlen(value_str) ;
  value_str[strLength+1] = 10 ;
  num = strlen(value_str);
  count = fwrite(value_str, sizeof(char), num, file);
 }

file で指定されたファイルに value_str の値を書き込む際に問題が発生しています。fwrite を含むコード行に到達するまで、value_str の値は変更されません。その後、ジャンク値に変わります。何が悪いのか教えてください。SizeOfFileName は先に関数に渡されます。コードは、コードの fwrite 行に到達するまで完全に機能し、その後その値が変化します。いくつかのジャンク値がテキスト ファイルに書き込まれます。

関数 fp_to_str は、現在のコードの私自身の関数です。value_strに必要な値を適切に返します。fp_to_str が行うことは、double 数値を文字配列に変換することです。これは、value_str に格納されます。

コードが fwrite で完了すると、value_str にある正しいデータがガベージ値に変更されます。

ddata[i] は double 配列から double の数値を 1 つずつ取得し、fp_to_str() に渡します。私がやろうとしているのは、ddata[] 配列にあるこれらの double の数値をテキスト ファイルに書き込むことです。

文字列の末尾に値 10 を追加する行にコメントを付けました。文字列の最後にヌル文字を追加する必要があると誤って想定しました。私はまだ同じ問題を抱えています。誰かが理由を知っていますか?

4

2 に答える 2

2

エイドリアン・マッカーシーが言ったことに加えて:

value_str = fp_to_str(ddata[i]) ;
strLength= strlen(value_str) ;
value_str[strLength+1] = 10 ;
num = strlen(value_str);

numはここに等しくなりstrLengthます。これにより、何をしているのかよくわからないと思います。(何をしているのですか?) null ターミネータの10のスペースに値 (マジック定数 - これは改行ですか? '\n' を使用) を追加しました。あなたの文字列は次のとおりです。

o  W  o  r  l  d  \0 \x10
于 2010-07-21T00:12:55.433 に答える
0

value_strを含む行まで変更されない場合はfwritefp_to_str戻る必要がありますNULL(ポインターがに初期化されNULL、その値が変更されないことが報告されているため)。NULLからの有効な戻り値ですかfp_to_str、それともエラーを示している可能性がありますか?

于 2010-07-21T00:14:46.683 に答える