1

David Haskins の「C in Linux」という本で C を学んでいましたが、問題があります。このコードをコンパイルしようとすると:

#include <stdio.h>
#include <string.h>

int main (int argc, char *argv[], char *env[]) {

    printf("Content-type:text/html\n\n<html><body bgcolor=#23abe2>\n"); 
    char value[256] = "";

    strncpy(value,(char *) getenv("QUERY_STRING"), 255);
    printf("QUERY_STRING:%s<BR>\n", value );
    printf("<form>\n");
    printf("<input type=\"TEXT\" name=\"ITEM1\"> \n");
    printf("<input type=\"TEXT\" name=\"ITEM2\"> \n");
    printf("<input type=\"SUBMIT\">");
    printf("</form></body></html>\n");

    return 0; 
}

ターミナルにこの警告が表示されます!

chapter4_1.c: In function ‘main’:
chapter4_1.c:14:16: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
4

1 に答える 1

7

するのを忘れていました#include <stdlib.h>。これは、getenv()がどこにも宣言されていないことを意味するため、intキャスト先の をデフォルトで返すと想定されますchar *。64 ビット マシンでは、int(32 ビット) とchar *(64 ビット) のサイズが異なるため、警告が表示されます。

余談ですが、既に a を返しているため、 to へのキャストchar *は必要ありません。キャストはエラーをマスクするだけです (つまり、キャストがなければ、プログラムは を に渡すことに関する明確なエラー メッセージを表示します) 。getenv()char *intchar *

于 2013-08-14T01:42:30.540 に答える