ファイル名: 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);
ということになります。
このエラーはどういう意味でしょうか?
コンパイルエラー
Re:コンパイルエラー
> ↑このようなコンパイルエラーになります。
エラーではなく、警告です。
errorじゃなくってwarningって書いてありますよね?
> ファイル名:51: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
strlen関数の引数が、unsignedを期待してないからではないでしょうか。
> log2 = base64Encode(log);
かんじんなところ(logとかlog2の定義部分)を省略してしまってるので、
何も回答できません。
エラーではなく、警告です。
errorじゃなくってwarningって書いてありますよね?
> ファイル名:51: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
strlen関数の引数が、unsignedを期待してないからではないでしょうか。
> log2 = base64Encode(log);
かんじんなところ(logとかlog2の定義部分)を省略してしまってるので、
何も回答できません。
Re:コンパイルエラー
>かんじんなところ(logとかlog2の定義部分)を省略してしまってるので、
char *log,*log2
としています。
フォームから送信された値をlogに書き込んでいます。
char *log,*log2
としています。
フォームから送信された値をlogに書き込んでいます。
Re:コンパイルエラー
> char *log,*log2
と定義して、
> log2 = base64Encode(log);
と呼び出している、っと。
さて、関数本体の
> unsigned char *base64Encode(unsigned char *source)
と一致してますか?
たぶん、お使いの処理系では
char
と書くと
signed char
のことなんでしょうね。

と定義して、
> log2 = base64Encode(log);
と呼び出している、っと。
さて、関数本体の
> unsigned char *base64Encode(unsigned char *source)
と一致してますか?
たぶん、お使いの処理系では
char
と書くと
signed char
のことなんでしょうね。

Re:コンパイルエラー
>たぶん、お使いの処理系では
>char
>と書くと
>signed char
>のことなんでしょうね。
どのようにしたらよろしいでしょうか?
一応今のままでも動いてはいるのですが不安なんでコンパイルのときに何もでないようにしたいのですが・・・
>char
>と書くと
>signed char
>のことなんでしょうね。
どのようにしたらよろしいでしょうか?
一応今のままでも動いてはいるのですが不安なんでコンパイルのときに何もでないようにしたいのですが・・・