0

unsigned char* 配列をファイルに書き込もうとしています。

これまでに試したコードの最小限の動作例は次のとおりです (fp が正しく初期化されていると仮定します)。

unsigned char* x; int i; int j; int sizeOfx;
for (i=0; i<n; i++) {
    x = // getter function with parameter i
    sizeOfx = // getter function that returns the number of elements in x
    for (j=0; j<sizeOfx; j++) {
        fprintf(fp,"%s",x[j]);
    }
}

つまり、一度に 1 要素ずつ char 配列を調べて、それをファイルに書き込んでいます。

ただし、エラーが発生します

format ‘%s’ expects argument of type ‘char*’, but argument 3 has type ‘int’ [-Wformat]

どうすればこれを修正できますか?

事前にどうもありがとうございました!

4

2 に答える 2

3

%s文字列を出力するために使用されるため、エラーを「修正」するように変更x[j]する必要があります。x

本当にそれぞれを別々に書きたいように見えるのでchar、「要素」(文字列の文字)をどのように格納するかを考える必要があります。

%cそれらの値をASCII値としてファイルに保存するために使用できます(完全な文字列より多く/少なく書き込みたい場合を除いて、%sとを使用する場合は基本的に同じです)。x

または、「要素値」を整数として格納できます。つまり、を使用して0〜9の文字を使用したテキスト値を格納できます%d%xまたは、0〜9とafの文字を使用して16進数にすることもできます。

したがって、の「要素」をどのように格納するかはあなた次第ですx

于 2013-01-23T16:33:03.367 に答える
2

%s の代わりに %c (文字印刷用) を試してください。

または、次のように印刷行を書くこともできます。

fprintf(fp,"%s",(char*)x[j]);

これは、x[j] のポインターを (本質的に) 文字列に静的にキャストし、そのループに入る文字列が "abcdef" の場合、出力は次のようになります。

"abcdefbcdefcdefdefeff"

これは、あなたがやりたいことをするために c が完全に開かれている場所です。

于 2013-01-23T16:29:41.410 に答える