叠加态的猫 发表于 2016-1-18 21:35:50

求助有关scanf_s的问题

本帖最后由 叠加态的猫 于 2016-1-18 23:44 编辑

求教,以下代码,手动输入hell,printf出值为空!?查看字符串内存为0,请问是怎么回事?
#include <stdio.h>
#include <stdlib.h>

void main(void)               
{       
        char b; //= {"hell"};
        scanf_s("%s",&b);
        printf("%s\n", b);

人造人 发表于 2016-1-18 23:44:30

warn:

        do
        {
                printf("请输入4个10以内互不相同的正整数:");
                scanf_s("%d", &b);
                printf("%d\n", sizeof(b));
                printf("%d\n", b);
        } while (b >= 10000 || b <= 999); //这是要干嘛

叠加态的猫 发表于 2016-1-18 23:47:13

人造人 发表于 2016-1-18 23:44
warn:

        do


额。。。其实原意是保证输入的数是4位的。。。已经废弃了,,,题目已经更新,,,请帮我看看简化描述后的问题呗,,,就是有关scanf输入字符串后内存查不到变化的问题。。。

人造人 发表于 2016-1-18 23:52:33

叠加态的猫 发表于 2016-1-18 23:47
额。。。其实原意是保证输入的数是4位的。。。已经废弃了,,,题目已经更新,,,请帮我看看简化描述后 ...

scanf_s("%9s", s, _countof(s)); // buffer size is 10, width specification is 9
来自msdn

人造人 发表于 2016-1-18 23:57:19

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

void main(void)
{
        char b; //= {"hell"};
        scanf_s("%s", &b, sizeof (b));
        printf("%s\n", b);

}

小甲鱼 发表于 2016-1-19 03:47:41

scanf_s("%s",&b);

应该改为:

scanf_s("%s", b, 5);

数组名即可,不用加 &

ligen超越 发表于 2016-1-19 10:05:41

int a={2,3,4,5};
这句是定义数组并赋值,
a表示的是数组的第一个数的地址,和&a一样。
a+1 表示的是第二个数组的地址,和&a一样
&a+1 表示的是第数组末尾地址,和&a+sizeof(int)*5 一样。(这个我在编译器里面调试看到的结果,也不知道什么原因)

人造人 发表于 2016-1-19 10:25:54

小甲鱼 发表于 2016-1-19 03:47
scanf_s("%s",&b);

应该改为:


老师,scanf_s 需要3个参数吧

黑龍 发表于 2016-1-20 17:39:40

scanf_s没用过 不知道。。。。不过scanf_s真的是3个参数的,不过可以省略
ps:scanf函数有溢出漏洞哦
页: [1]
查看完整版本: 求助有关scanf_s的问题