警告:初始化使得整数指针没有强制转换[默认启用] char *

时间:2014-03-30 15:28:39

标签: c

我需要编写一个shell,我的老师要求我们用

创建一个用户名
char* userName = getlogin();

当我尝试编译文件时会在标题中给出警告,当我尝试运行程序时会出现段错误(当我用eclipse运行它时会打印出NULL)

所以,我的问题是char*出了什么问题?为什么getlogin会给我NULL

这是我的代码:

int main(void)
{
    char input[INPUT_SIZE+1]; //user's input
    char hostName[INPUT_SIZE];
    //char* userName = getlogin();
    char* userName = getpwuid(getuid());

    if (gethostname(hostName,255)< 0) {
        printf("there is no hostname\n", hostName);
        exit (200);
    }
    int code;
    code=0;
while(1)
{
    printf("%d %s@%s$ ",code,userName,hostName);


    fgets(input, INPUT_SIZE, stdin);
    if(strcmp("\n",input) == 0)
        continue;

    printf("it didn't continue\n");

    if(strcmp("exit\n",input)==0)
    {
        printf("you exit\n");
        continue;
        //exit(127);
    }
    printf("it didnt go to exit\n");
}

return EXIT_SUCCESS;
}

2 个答案:

答案 0 :(得分:0)

getpwuid返回指向struct passwd的指针,而不是char*getlogin会返回char*。但是,如果您在尝试使用char*初始化int时遇到错误,可能是因为getlogin未声明且编译器假定其类型为{{ 1}}。你是否包含了定义这些功能的标题? <{1}}应包含在

int

答案 1 :(得分:0)

你甚至没有打电话给getlogin(),你注释掉了那条线!取消注释char* userName = getlogin();并注释掉下一行,它将起作用。