2017-02-05 5 views
1

私は私の質問は、なぜそれが、次のコードを作業しているされているconst char変数なぜ私はそれを変更すると機能しますか?

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; 
} 

と?その "usuario"変数は、NULLがCONST型であると定義されていました。これらの変数はプログラム全体で変更することはできませんが、変更された中ではusuario = str;

+0

http://stackoverflow.com/questions/7736049/const-char-pointer-assignments –

+2

'usuario'は' const'ではありません。それが指しているのは 'const'です。 – chux

+0

thx Micho、質問、どのようにコードにその灰色のボックスを入れますか?私は "' 'を使用しましたが、動作しませんでした – EmiliOrtega

答えて

4

usuarioはこの場合定数ではないと仮定しています。

ヒント:ポインタ宣言はusuario is a pointer to constant char

はとしてusuarioを宣言するには、

、この場合には、右から左へ

const char *usuario= NULL; 

を読んで試してみてください右から左へ読まれなければなりません定数、do

const char * const usuario= NULL; 

上記コードスニペットでは、usuarioは、となります。

が右から左へのコードスニペットの上に読んで試してみてください、この場合は、usuario is a constant pointer to a constant char

+0

ありがとうお友達!この場合(上のコードでは)char * usuarui = NULLの前に "const"を使用する必要がありますか? 私はそのコードで "const"を使用する目的が何であるか分かりません。 – EmiliOrtega

+0

@EmiliOrtegaいいえ、ここでは必要ありません。 – Yousaf

+0

thx、最後に、どのような場合に使用することをお勧めしますか? – EmiliOrtega

関連する問題