1

我正在通过 David Haskins 的一本名为“Linux 中的 C”的书学习 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 位)具有不同的大小,因此会出现警告。

顺便说一句,强制转换char *为没有必要,因为getenv()已经返回 a char *。强制转换仅用于掩盖错误(即,没有它,程序会给您一个关于将 an 传递给 a 的明确错误消息intchar *

于 2013-08-14T01:42:30.540 回答