C,为什么我不能声明指针并初始化它?

时间:2017-02-05 20:17:04

标签: c pointers

好吧,我有以下代码:

int main(int argc, char **argv, char **envp)
{
    const char *usuario= NULL;
    while(*envp)
    {
        char *str = *envp++;
        //if(strcmp(str,"USERNAME")==0)
        if(str[0] == 'U' && str[1] == 'S' && str[2]=='E' && str[3]=='R' && str[4] == 'N')
        {
            usuario = str;
            break;
        }
    }
    if(usuario != NULL)
    {
        printf("Hola, bienvenido al programa %s",usuario);
    }
    return 0;
}

我的问题是为什么我不能在while之外声明变量并在里面初始化它?

char *str;
const char *usuario= NULL;
while(*envp)
{
    *str = *envp++;
    if(`...

编译器说:警告:赋值使用指针生成整数而不使用强制转换

2 个答案:

答案 0 :(得分:2)

  

警告:赋值在没有强制转换的情况下从指针生成整数

问题是你没有指定指针,而是指定指针指向的值:

*str = *envp++;

*之前的str会导致指针被取消引用。相反,你可能想要:

str = *envp++;

答案 1 :(得分:2)

因此*str = *envp++;的问题在于您引用了str指针,然后指定了一个指向char的指针。换句话说:

  

str是指向char

的指针      

* envp是一个指向char

的指针

因此

  

str = * envp ++

将是一个正确的陈述,因为它们都是指向char的指针。但是在提供的代码中,您正在执行以下操作:

  

* str是一个char

     

* envp是一个指向char

的指针

这意味着您正在尝试将“指向char的指针”分配给char。类型不匹配。

所以通过改变你的代码来解决这个问题:

char *str;
const char *usuario= NULL;
while(*envp)
{
    str = *envp++;
    if(... `