格式说明符对scanf的作用

<!--scanf printf 不负责-->

这里重申格式说明符的作用以及重要性  可以跳过

考虑如下代码

int n;
scanf("%c", &n);
printf("%c\n", n);

在这里我们将n当做了char型变量  而不是int  但是你会发现编译通过了  并且运行结果也没有问题

再做一个改变
int n;
scanf("%d", &n);   // %c -> %d
printf("%c\n", n);

这时候我们输入65  程序会输出A  因为65是A的ASCII码

相反  我们如果改成这样

int n;
scanf("%c", &n);
printf("%d\n", n);

我们输入A  程序就会输出  65

看得出来  无论是scanf还是printf  它们在给变量获取输入或者打印输出的时候  不会明白这个变量本身的类型  而是需要借助格式说明符

如果你想从中作梗  违反规则  编译器不会知道

char ch;
scanf("%d", %ch);

你以%d对应着一个char类型变量的地址  scanf就会以为这个char变量是一个int型变量

但是这存在隐患  因为如果你输入的数足够大  大到一字节装不下(char类型是一字节)  那么将会覆盖掉其他内存

scanf告诉你“既然你认为它是一个四字节的int变量  那么它就该存的下足够大的值”

而事实上溢出了  超出的部分覆盖掉的内存可能已被其他变量占用  也可能是更危险的地带  这将导致程序出错甚至崩溃

因此请记住  printf和scanf不会明白你要打印或者获取的变量究竟是什么类型  一切由格式说明符负责

时间: 2024-10-23 19:18:18

格式说明符对scanf的作用的相关文章

集合与委托格式说明符

ref: http://mp.weixin.qq.com/s?__biz=MjM5NzU0MzU0Nw==&mid=400694133&idx=1&sn=9375ff6a0d3552e09e0405c8a8d88289&scene=0#wechat_redirect #!/usr/bin/env python # -*- coding:'uft-8' -*- class Student(object): def __init__(self,name=None,gender=

格式说明符对于字符串的妙用

代码如下 #include<stdio.h>#define CNBLOG "I love CnBlog" int main(void){printf("/%2s/\n",CNBLOG); printf("/%24s/\n",CNBLOG); printf("/%24.5s/\n",CNBLOG); //只显示五个字符 剩余19个是空格 printf("/%-24.5s/\n",CNBLOG);

格式转换说明符scanf,printf格式%大全/格式化输入输出(转)

相信不管大神还是菜鳥,都认得printf.它家还有兄弟sprintf,scanf,sscanf...$^&* 当你华丽丽的写下char c='c';printf("char=%d",c);的时候,一切都还是那么美好. 不过当你声明一个char buf[2];然后sscanf("30000","%d",buf);的时候,就不那么好玩了. 本以为2个字节足够装下32767以内的数字,却把内存写爆了. 此处关键就是格式符乱写产生的问题. 此时最

C语言格式输入函数scanf使用

函数 scanf() 是从标准输入流stdio (标准输入设备,一般指向键盘)中读内容的通用子程序 函数原型为 int scanf(const char * restrict format,...); 函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置 scanf函数返回成功读入的数据项数,读入数据时遇到了"文件结束"则返回EOF 控制串中的空白符使 scanf() 在输入流中跳过一个或多个空白,空白符可以是

scanf中的%[^\n]%*c格式

scanf中的%[^\n]%*c格式 (2011-02-19 16:12:38) 转载▼ 标签: 控制字符 空白字符 字符串 变量 整数 it 分类: C语言编程 文章转载自http://blog.csdn.net/sun_top/archive/2009/06/02/4235992.aspx scanf 语法:   #include <stdio.h>  int scanf( const char *format, ... ); 类似函数有       int scanf(const cha

c语言scanf详解

函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式.其调用格式为:      scanf("<格式化字符串>",<地址表>);scanf()函数返回成功赋值的数据项数,出错时则返回EOF.其控制串由三类字符构成:1.格式化说明符: 2.

c语言中scanf()、printf()函数

函数调用scanf(“%d”,  &weight) 包含两个参数:“%d” 和&weight.C用逗号来隔开函数调用中的多个参数: 但是printf()和scanf()函数比较特殊,其函数数目可以不受控制. 例如,我们可以使用1个.2个.3个甚至4个参数调用printf()函数.而程序需要知道参数的数目才能正常工作,这两个函数通过第一个参数确定后续参数的个数,方法是第一个参数字符串中的每个说明符对应了后面的一个参数. 以下语句包含两个格式说明符:%d 和%d printf(“%d cats

C语言scanf函数详解

函数名: scanf 功 能: 运行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.能够读入不论什么固有类型的数据并自己主动把数值变换成适当的机内格式. 其调用格式为:      scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF. 其控制串由三类字符构成: 1.格

C语言格式化说明符

1.1.1 格式化输入输出函数一.printf()函数printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息.在编写程序时经常会用到此函数.printf()函数的调用格式为:printf("<格式化字符串>", <参量表>);其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,用来确定输出内容格式.参量表是需要输出的一系列参