コンパイルエラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Axe

コンパイルエラー

#1

投稿記事 by Axe » 14年前

ファイル名: In function 'base64Encode': ファイル名:51: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness ファイル名: In function 'main': ファイル名:372: warning: pointer targets in passing argument 1 of 'base64Encode' differ in signedness ファイル名:372: warning: pointer targets in assignment differ in signedness

↑このようなコンパイルエラーになります。

下記ソース。
unsigned char *base64Encode(unsigned char *source)
{
unsigned char *result = NULL;
unsigned char buf1,buf2,buf3;
unsigned char ind1,ind2,ind3,ind4;

int i,j;
int size;

size = sizeof(source[0]) * strlen(source);

result = calloc(sizeof(char),(size*2)+1);

for(i=0, j=0; i<size; i+=3, j+=4)
{
buf1 = (i < size - 0) ? *(source + i + 0) : '\0';
buf2 = (i < size - 1) ? *(source + i + 1) : '\0';
buf3 = (i < size - 2) ? *(source + i + 2) : '\0';

ind1 = (buf1 >> 2);// 2bit右シフト
ind2 = (buf1 & 0x03) << 4 | (buf2 >> 4);
ind3 = (buf2 & 0x0f) << 2 | (buf3 >> 6);
ind4 = (buf3 & 0x3f);

*(result + j + 0) = BASE64[ind1];
*(result + j + 1) = BASE64[ind2];
*(result + j + 2) = ( i < size - 1 ) ? BASE64[ind3] : '=';// 端数は=に
*(result + j + 3) = ( i < size - 2 ) ? BASE64[ind4] : '=';
}

return(result);
}

int main(void)
{
省略

log2 = base64Encode(log);

省略
}


このソースだと51行目は
size = sizeof(source[0]) * strlen(source);
372行目は
log2 = base64Encode(log);
ということになります。

このエラーはどういう意味でしょうか?

Axe

Re:コンパイルエラー

#2

投稿記事 by Axe » 14年前

追記
コンパイルはLinuxでgccを使ってます。

box

Re:コンパイルエラー

#3

投稿記事 by box » 14年前

> ↑このようなコンパイルエラーになります。

エラーではなく、警告です。
errorじゃなくってwarningって書いてありますよね?

> ファイル名:51: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness

strlen関数の引数が、unsignedを期待してないからではないでしょうか。

> log2 = base64Encode(log);

かんじんなところ(logとかlog2の定義部分)を省略してしまってるので、
何も回答できません。

Axe

Re:コンパイルエラー

#4

投稿記事 by Axe » 14年前

>かんじんなところ(logとかlog2の定義部分)を省略してしまってるので、
char *log,*log2
としています。

フォームから送信された値をlogに書き込んでいます。

box

Re:コンパイルエラー

#5

投稿記事 by box » 14年前

> char *log,*log2

と定義して、

> log2 = base64Encode(log);

と呼び出している、っと。
さて、関数本体の

> unsigned char *base64Encode(unsigned char *source)

と一致してますか?


たぶん、お使いの処理系では
char
と書くと
signed char
のことなんでしょうね。

画像

Axe

Re:コンパイルエラー

#6

投稿記事 by Axe » 14年前

>たぶん、お使いの処理系では
>char
>と書くと
>signed char
>のことなんでしょうね。

どのようにしたらよろしいでしょうか?
一応今のままでも動いてはいるのですが不安なんでコンパイルのときに何もでないようにしたいのですが・・・

box

Re:コンパイルエラー

#7

投稿記事 by box » 14年前

> どのようにしたらよろしいでしょうか?

まずは自分で考えてみてくださいよ。
人の回答に頼りきりだと、プログラミング能力がアップしませんよ。

画像

Axe

Re:コンパイルエラー

#8

投稿記事 by Axe » 14年前

>引数と戻り値の型が一致してないって警告
普通に型を一致させればいいだけですか?

box

Re:コンパイルエラー

#9

投稿記事 by box » 14年前

> >引数と戻り値の型が一致してないって警告
> 普通に型を一致させればいいだけですか?

そう思ったんなら、手を動かす。

Axe

Re:コンパイルエラー

#10

投稿記事 by Axe » 14年前

ありがとうございました。
関数のunsigned charをcharにしたら問題なくなりました。

閉鎖

“C言語何でも質問掲示板” へ戻る