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

标签 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(`...

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

最佳答案

warning: assignment makes integer from pointer without a cast

问题是你没有分配给你的指针,你正在分配给指针指向的值:

*str = *envp++;

str 之前的 * 导致指针被解除引用。相反,您可能想要:

str = *envp++;

关于C、为什么我不能声明指针并初始化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42056808/

相关文章:

c++ - const int*、const int * const 和 int const * 之间有什么区别?

c++ - 使用 std::launder 从指向非事件对象的指针获取指向事件对象成员的指针?

c - visual studio 2008 目标机器类型列表

c - 当字符集为 ASCII 时,如何在文字字符串 ISO/ANSI C 中表示 Unicode 字符?

c - 相对于函数开头的 __LINE__ 宏的等价物

c - 字数统计程序不起作用。代码示例来自《The C-programming Language》一书 Ritchie & Kernighan

c++ - C++ 中使用 char* 的指针算术

c++ - 将成员函数指针传递给父类

c++ - 将多态 C++ 对象转换为非多态 C 对象

c - 如何创建和迭代 graphids 列表(Apache AGE)?