2015-06-19 107 views
-4

所以我想学习c,但我无法弄清楚为什么这段代码将无法正常运行。C无法弄清楚是否陈述

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char userName[25]; 
    char myName[25] = "myName"; 

    printf("Please enter your name: \n"); 
    scanf("%s", userName); 

    if(userName == myName) 
    { 
     printf("Congratulations your name is myName!!!"); 
    } 
    else 
    { 
     printf("Your name is %s how disappointing...", userName); 
    } 


    return 0; 
} 

问题是if语句永远不会返回true。 任何人都可以帮助我吗?

+0

请正确格式化您的代码。 – Olaf

+0

C课程中,char用户名[25]声明了一个指针,char myName [25]声明了一个不同的指针,指向内存中的两个不同位置(在这种情况下是堆栈),因此指针永远不会相等(每个内存位置可能相等,但**内存**必须进行比较,而不是关于此行的**指针**) – Les

+0

:'scanf(“%s”,userName);'这个scanf()调用允许用户溢出userName []缓冲区。建议:'scanf(“%24s”,userName);'并检查从scanf()返回的值(不是参数值)以确保操作成功。 – user3629249

回答

3

这条线比较位置的字符串,这是不同的,因为你在比较两个不同的字符串。

if(userName == myName) 

C中的正确测试是使用库函数。

#include <string.h> 
... 
if(strcmp(userName,myName) == 0) 
+0

谢谢我现在明白了。 – Meikk99

+0

@ Meikk99,Weather Vane是对的。检查所有给你的问题的答案,并接受一个答案(点击答案左侧的勾号图标)。很好回答btw,+1。 :) – gsamaras

+0

好吧,会感谢您的快速回答 – Meikk99

0

声明if(userName == myName)将无法​​正常工作,你期待的方式运行。使用strcmp()函数比较两个字符串。

0

使用strcmp/strncmpstring.h声明比较字符串;在你的程序中,你正在比较的值(转换后)是指针值。

1

在C语言中,你应该使用strcmp()比较两个字符串。

所以更改此设置:

if(userName == myName) 

这样:

if(strcmp(userName,myName) == 0) 
1

你不能比较那样的字符串。你正在做的是比较指向各自的刺(这是显然不同)。 所以,

userName == myName 

不会在这里工作。您可以使用字符串函数来比较两个字符串。