2017-04-20 44 views
0

我有这样的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; 
      } 
     } 
    } 
} 

这反映在Linux中tty外壳。 问题是,当我使用正确的凭据,它说“不正确的登录”。

为什么会发生这种情况?

+4

查找'strcmp' - Google it! –

+0

当查看手册页 - 阅读有关'scanf' –

+1

请打开您的编译器警告! –

回答

2

我希望这会帮助,

在C中,你必须使用STRCMP或STRNCMP字符串比较。它就像Java中的String.Equal一样。

如果您正在比较int堆栈内存中的哪一个是可以的,因为它被写入(在内存中)本身,但是如果该变量在分配的内存或数组中,则每个元素都具有分配内容的地址记忆。由于内容的两个地址不同,所以必须使用函数来比较内容本身。

祝你好运!

+4

C和C++是不同的语言。 C++会使用'std :: string' –

+0

在C中你可以使用'str * cmp()',但在'C++'中你可以使用'std :: string :: compare'。 – alvits

+0

@jenesaisquoi OMG ..你真的是对的!那是很久以前的事了。 –