让scanf()接收空格

大家都知道scanf()遇到空格后就会结束 原因是底层函数是这么返回给你的
调用scanf()时 那现在从底层把他截获
让scanf()接收空格
让scanf()接收空格
源码://vs2015


#include <windows.h>
#include<iostream>
using namespace std;
_ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned);
#ifdef __cplusplus 
extern "C"
#endif 
FILE* __cdecl __iob_func(unsigned i) {
    return __acrt_iob_func(i);
}

// 全局变量
char g_szId[120] = { " i love this game\n\n" };
#pragma comment(lib,"user32.lib")

int main()
{
    // 局部变量
    char szBuf[120];
    printf("please input password: ");
    scanf_s("%s", szBuf, 120);
    char* p = *(char**)((int)__iob_func(0) + 4);  //取缓冲区中的值 __iob_func(0)输入  
    //__iob_func(1)输出  __iob_func(2)错误
    printf("%s\n", szBuf);
    printf("%s", p);
    if (strcmp(p, g_szId) == 0)
    {
        printf("It's Right\n");
    }
    else
    {
        printf("It's Err \n");
    }
    system("pause");

    return 0;
}

//vc6.0版 
//#include "stdio.h"
//#include <windows.h>
 全局变量
//char g_szId[120] = { " i love this game\n\n" };
//#pragma comment(lib,"user32.lib")
//
//int _tmain(int argc, _TCHAR* argv[])
//{
//  // 局部变量
//  char szBuf[120];
//  printf("please input password: ");
//  scanf_s("%s", szBuf, 120);
//
//  char* p = *(char**)((int)__iob_func() + 8);
//  if (strcmp(p, g_szId) == 0)
//  {
//      printf("It's Right \n");
//  }
//  else
//  {
//      printf("It's Err \n");
//  }
//  system("pause");
//
//  return 0;
//}

让scanf()接收空格
让scanf()接收空格
为什么打那么多呢 其时底层不管你打什么它都保存在那
用途:
优化下可以作为登录密码(我本来就是逆出来的)

转载于:https://blog.51cto.com/haidragon/2118179

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值