-1

私は3つの配列を持っています.2つはintで、もう1つはcharで、それらをファイルに書き込もうとしています。

私のアプローチは次のとおりです。

FILE *file;
char *allinfo=NULL;
int intArrayOne[7];
int *intArrayTwo=malloc(10*sizeof(int));
char *charArray=malloc(5*sizeof(char));
.....
write into the arrays
.....

if((file=fopen("filename", "a+"))==NULL)
     printf("something went wrong\n");
else
{
     asprintf(&allinfo, "%d%d%s", intArrayOne, intArrayTwo, charArray);
     fprintf(file, "%s", allinfo);
     fclose(file);
}

これに関する問題は、int 配列が allinfo 文字列に書き込まれないことです。(ちなみに、asprintf 関数はそれ自体でメモリを割り当てます)。では、これを効率的に行うにはどうすればよいのでしょうか。

4

2 に答える 2

0

%d整数の配列ではなく、単一の整数値を出力します。配列を出力するフォーマットコードはありません。各配列要素を個別に渡す必要があります。

asprintf(&allinfo, "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%s",
    intArrayOne[0], ... intArrayOne[6], intArrayTwo[0], ... intArrayTwo[9], charArray);
于 2012-11-15T04:12:39.887 に答える
0

フォーマット文字列は"%d%d%s"、です。これは、単一の整数の後に単一の整数が続き、その後にNULで終了する文字列が続きます。-style関数が整数配列の長さを知る方法も、文字列の終わりを知る方法もありprintf()ません。

%dしたがって、7つの整数の配列に対して7つのフラグを指定する必要があります。実際には、配列の要素をループして、を呼び出す必要がありますasprintf()

'\0'文字列については、に渡す前にで終わることを確認する必要がありますasprintf()

于 2012-11-15T04:13:10.407 に答える