2017-04-20 9 views
0

を働いていない私は、Linuxでttyシェルを反映し、このCコードCコード

#include <stdio.h> 
int main() { 
    char Username[100]; 
    char Password[100]; 
    printf("discl0sed 0.1 discl0sed tty1\ndiscl0sed login: "); 
    scanf("%s", Username); 
    printf("Password: "); 
    scanf("%s", Password); 
    if (Username == "root" && Password == "!DISCL0SEDor1=1--") 
    { 
     return 0; 
    } 
    else 
    { 
     while (1 == 1) 
     { 
      printf("Login incorrect\ndiscl0sed login: "); 
      scanf("%s", Username); 
      printf("Password: "); 
      scanf("%s", Password); 
      printf("%s:%s", Username, Password); 
      if (Username == "root" && Password == "!DISCL0SEDor1=1--") 
      { 
       break; 
      } 
      else 
      { 
       continue; 
      } 
     } 
    } 
} 

を持っています。 問題は正しい資格情報を使用しているときに「不正なログイン」と表示されることです。

どうしてですか?私はそれに役立つことを願っています

+4

'strcmp'をルックアップ - Googleそれ! –

+0

そのマニュアルページを見ると 'scanf'について読む –

+1

コンパイラの警告をオンにしてください! –

答えて

2

、Cで

は、あなたがstrcmpのかstrncmpはを使用して文字列を比較する必要があります。それはJavaのString.Equalのようなものです。

スタックメモリ内のintを比較する場合は、それ自体がメモリに書き込まれているので大丈夫ですが、変数が割り当てられたメモリまたは配列にある場合、各要素は割り当てられた内容のアドレスを持ちますメモリ。内容の2つのアドレスが異なるため、関数を使用して内容自体を比較する必要があります。

Good Luck!

+4

CとC++は異なる言語です。 C++では 'std :: string'を使用します –

+0

Cでは' str * cmp() 'を使用しますが、' C++ 'では' std :: string :: compare'を使用します。 – alvits

+0

@jenesaisquoi OMG ..あなたは本当に正しいです!それはかなり前のことでした。 –