好吧,我有以下代码:
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(`...
编译器说:警告:赋值使用指针生成整数而不使用强制转换
答案 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(... `