電子書籍の厳選無料作品が豊富!

C言語のコンパイル時に表示される以下のエラーの意味を教えて下さい。
また、できれば解決方法も教えて下さい。

「パラメータ '__buffer' は signed char * 型として定義されているので int は渡せない」

このエラーの該当箇所は、以下のsprintf文です。

for(i = 0 ;i < sign; ++i){
 sprintf(HEXDATA[i],"%02X",rbuf[i]); ← このステップです
}

なお、HEXDATA、rbuf、i、signは、
 char HEXDATA[256];
 char rbuf[256];
 int i,sign;
と定義しています。

rbufには入力ファイルから読み込んだテキストデータ「0123456」が入っており、
これを1文字ずつ16進数に変換して、順にHEXDATA[1]、HEXDATA[2]、HEXDATA[3]~~~
に格納していきたいのですが、どうしたら良いのでしょうか。

A 回答 (5件)

>'0'は0x30ではないでしょうか。



フォローありがとうございます。
アホな間違いしていました。


あとは、質問者さんの反応待ち…でしょうか。
    • good
    • 0

>質問者さん


テキストデータ「0123456」が入っており、
これを1文字ずつ16進数に変換して、順にHEXDATA[1]、HEXDATA[2]、HEXDATA[3]~~~
に格納していきたい

HEXDATA[]に入れたい値を16進数で書いてみてください。

>#3さん
'0'を0x31(ASCIIの場合)という値

'0'は0x30ではないでしょうか。
    • good
    • 0

たぶん、No.2さんの回答であっていると思いますが……



>rbufには入力ファイルから読み込んだテキストデータ「0123456」が入っており、
>これを1文字ずつ16進数に変換して、順にHEXDATA[1]、HEXDATA[2]、HEXDATA[3]~~~

'0'を0x31(ASCIIの場合)という値でHEXDATA[1]に入れたい。
というのであればsprintf()自体不要です。
HEXDATA[1] = rbuf[0];
という感じでループしていくだけです。
# HEXDATA[]への代入が「0から始まっていない」のは意図したモノかどうか不明ですが。
# コード見る限りは HEXDATA[0] = rbuf[0] っぽいですが。

'0'を"31"(ASCIIの場合)という「文字列として」HEXDATA[1]に入れたい。
というのであれば、既に回答付いているとおりです。
    • good
    • 0

char HEXDATA[256] ;


で宣言したら
HEXDATA[1],HEXDATA[2]... は char型です。
文字列にはなりません。文字(をあらわせるだけの大きさの整数)になります。

sprintfの第1引数には出力先の文字列を必要とします。
char型では一致しません。

> これを1文字ずつ16進数に変換して、順にHEXDATA[1]、HEXDATA[2]、HEXDATA[3]~~~
ということをするなら、文字列の配列として用意しないとです。
たとえば
char HEXDATA[256][3] ;
など。 「3」は文字列の長さ(2)+1です。

なお、「intは渡せない」と出るのは、char型にたいして暗黙の型変換が起っているのだと思われます。
    • good
    • 0

intで渡せと言われるならキャストすればいい


後、HEXDATAの宣言も間違っている
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!