标题:很神奇的C语言问题
只看楼主
blanknt
Rank: 1
等 级:新手上路
帖 子:19
专家分:7
注 册:2020-4-20
结帖率:60%
已结贴  问题点数:20 回复次数:5 
很神奇的C语言问题
今天闲着没事,看了一下以前编的程序:
#include <stdio.h>

int main (){
char a[8],password[8]="123456";
printf("请输入密码:\n");
scanf("%s",&a);
if(a==password){
printf("密码正确!\n");
}else{
printf("密码错误!\n");
}
return 0;
}

这仅仅是一个简单的程序。
在你不知道密码的情况下,能输出"密码正确!"吗?
我的思路:
if(a==password)
如果是正常输入密码:
if("123456"="123456")        结果:密码正确!
那么不正常呢?
if("1")//"=="123456")
我只是输入了   "1")//
语句就变成了这个:
if("1")       //"=="123456")
是不是就能输出:密码正确!
希望有人能解答一下。
搜索更多相关主题的帖子: printf C语言 password 输出 密码 
2020-04-23 12:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:8 
char a[8], password[8];
if( a == password ) // 肯定不等嘛,因为 a 和 password 是两个不同的数组。我猜你想要的是 if( strcmp(a,password) == 0 )
更严重的是 a == password 是未定义行为。

scanf("%s",&a);
虽然运行可能没错,但逻辑上它是错误的
要么 scanf("%s",a); 要么 scanf("%s",&a[0]);
2020-04-23 12:31
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:6 
一般前面没有sizeof的时候,数组名和字符串字面量的语法意义都是它们的首元素的首地址,而不是里面的内容。
楼主的那些思路存在根源上的误区。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-04-23 12:50
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:6 
你想对标 sql注入攻击?
差远了
sql是解释执行 执行的就是你输入的文本
C代码是编译执行 编译之后 判断比较这些东西都编程汇编指令
程序不会执行你输入的文本
只是把你的输入存在内存中

https://zh.
2020-04-23 14:03
blanknt
Rank: 1
等 级:新手上路
帖 子:19
专家分:7
注 册:2020-4-20
得分:0 
噢噢!明白了明白了!

红颜祸水
2020-04-23 14:10
自由而无用
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:61
专家分:1456
注 册:2021-8-9
得分:0 
line 3: a[8], &a[0] = 0x12ff8c;
char *pa; pa = a;
char (*ppa)[8]; ppa = (char(*)[8])&pa; ppa = &a;
scanf("%s",ppa);
2021-08-10 19:20
diycai
Rank: 8Rank: 8
等 级:贵宾
威 望:19
帖 子:147
专家分:895
注 册:2021-5-18
得分:0 
想要内存泄漏攻击,参考以下代码。

void printPassword()
{
    printf("password is 123456\n");
}

void printMax()
{
    int a[3];
    int i, n, max;
   
    printf("请输入数组大小,范围1~3\n");
    scanf("%d", &n);

    printf("请输入数值\n");
    for (i=0; i<n; i++)
    {
        scanf("%d", &a[i]);
    }

    max = a[0];
    for (i=1; i<n; i++)
    {
        if (a[i] > max)
        {
            max = a[i];
        }
    }
    printf("最大的数值是%d\n", max);
}

void main()
{
    printMax();
}
2021-08-11 13:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501211-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.231184 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved