精华内容
下载资源
问答
  • 格式控制字符串

    千次阅读 2019-07-25 16:30:32
    printf("格式控制字符串”,输出表列) 其中格式控制字符串用于指定输出格式。 格式控制串可由格式字符串和非格式字符串两种组成。 格式字符串:以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式...

    一.printf
    printf("格式控制字符串”,输出表列)
    其中格式控制字符串用于指定输出格式。
    格式控制串可由格式字符串和非格式字符串两种组成。
    格式字符串:以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如:
    “%d” 表示按十进制整型输出;
    "%ld"表示按十进制长整型输出;
    "%c"表示按字符型输出。

    非格式字符串:原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。
    格式字符串一般形式为: [标志] [输出最小宽度] [.精度] [长度] 类型;其中 [] 中的项为可选项。

    1.类型
    类型字符用以表示输出数据的类型,其格式符和意义如下表所示:

    • d 以十进制形式输出带符号整数(正数不输出符号)
    • o 以八进制形式输出无符号整数(不输出前缀0x)
    • X 以十六进制形式输出无符号整数(不输出前缀0x)
    • u 以十进制形式输出无符号整数
    • f 小数形式输出单、双精度实数
    • e , E 以指数形式输出单、双精度实数
    • g , G 以%或%e中较短的输出宽度输出单、双精度实数
    • c 输出单个字符
    • s 输出字符串

    2.标志
    标志字符为-、+、#和空格四种,其意义下表所示:
    - :右边填空格
    + :输出符号(正号或负号)
    空格 :输出值为正时冠以空格,为负时冠以负号
    # :对c、s、d、u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e、g、f类当结果有小数时才给出小数点。

    3.输出最小宽度
    用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。

    4.精度
    精度格式符以"."开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。

    5.长度
    长度格式符为h、l两种, h表示按短整型量输出,l表示按长整型量输出。

    二.scanf
    scanf函数的一般形式为: scanf(“格式控制字符串”,地址表列);
    格式字符串的一般形式为: %[输入数据宽度][长度]类型;其中有[]的项为任选项。

    1.类型:
    表示输入数据的类型

    • d 输入十进制整数
    • o 输入八进制整数
    • x 输入十六进制整数
    • u 输入无符号十进制整数
    • f 或 e输入实型数(用小数形式或指数形式)
    • c 输入单个字符
    • s 输入字符串

    2."*" 符:
    用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
    如: scanf("%d %*d %d",&a,&b);
    当输入为: 123时,把1赋予a, 2被跳过, 3赋予b。
    3.宽度:
    用十进制整数指定输入的宽度(即字符数)。
    如: scanf("% 5d",&a);
    输入12345678只把12345赋予变量a,其余部分被截去。
    4.长度
    长度格式符为和h, l表示输入长整型数据 (如%ld)和双精度浮点数(如%lf) 。h表示输入短整型数据。

    注意事项:
    1.scanf函数中没有精度控制如:scanf("%5.2f",&a);是非法的,不能企图用此语句输入小数为2位的实数。
    2.scanf中要求给出变量地址,如给出变量名则会出错。如:
    scanf(%d",a); 是非法的,应改为 scnaf("%d",&a);才是合法的。
    3.在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格, TAB或回车作间隔。C编译在碰到空格, TAB,回车或非法数据(如对"%d"输入"12A"时, A即为非法数据)时即认为该数据结束。
    4.在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
    例如: scanf("%c%c%c",&a,&b,&c);
    如果输入 d e f 则把 ‘d’ 赋予 a, ’ ’ 赋予 b , ‘e’ 赋予 c 。只有当输入为 def 时,才能把 ‘d’ 赋于 a, ‘e’ 赋予 b , ‘f’ 赋予 c。
    如果我们想实现输入d e f分别赋予a ,b, c那么scanf语句一定是这样scanf ("%c %c %c",&a,&b,&c);
    如果scanf ("%c,%c,%c",&a,&b,&c);那么我们一定输入要输入d,e,f才能正确的将其赋值给a,b,c
    5.如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确。

    展开全文
  • printf的格式控制字符串

    千次阅读 2015-09-23 10:09:57
    printf(“格式控制字符串”, 输出表列) 其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、...
    printf(“格式控制字符串”, 输出表列)
    其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如:
    “%d”表示按十进制整型输出;
    “%ld”表示按十进制长整型输出;
    “%c”表示按字符型输出等。


    非格式字符串原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。


    格式字符串
    在Turbo C中格式字符串的一般形式为:
    [标志][输出最小宽度][.精度][长度]类型。
    其中方括号[]中的项为可选项。


    各项的意义介绍如下。


    1) 类型
    类型字符用以表示输出数据的类型,其格式符和意义如下表所示:
    格式字符 意义
    d 以十进制形式输出带符号整数(正数不输出符号)
    o 以八进制形式输出无符号整数(不输出前缀0)
    x, X 以十六进制形式输出无符号整数(不输出前缀Ox)
    u 以十进制形式输出无符号整数
    f 以小数形式输出单、双精度实数
    e, E 以指数形式输出单、双精度实数
    g, G 以%f或%e中较短的输出宽度输出单、双精度实数
    c 输出单个字符
    s 输出字符串


    2) 标志
    标志字符为 - 、 + 、# 和空格四种,其意义下表所示:
    标 志 意义
    - 结果左对齐,右边填空格
    + 输出符号(正号或负号)
    空格 输出值为正时冠以空格,为负时冠以负号
    # 对c、s、d、u类无影响;
    对o类,在输出时加前缀o;
    对x类,在输出时加前缀0x;
    对e、g、f 类当结果有小数时才给出小数点。
    3) 输出最小宽度
    用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。


    4) 精度
    精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。


    5) 长度

    长度格式符为h、l两种,h表示按短整型量输出,l表示按长整型量输出。

    #include "stdafx.h"
    #include<stdio.h> 
    #include<string.h> 
    int main()
    {
    	char c, s[20];
    	int a = 1234;
    	float f = 3.141592653589;
    	double x = 0.12345678912345678;
    	strcpy(s, "Hello,World");
    	c = '\x41';
    	printf("a=%d\n", a);//按照十进制整数格式输出,显示 a=1234
    	printf("a=%d%%\n", a);//输出%号 结果 a=1234%
    	printf("a=%6d\n", a);//输出6位十进制整数 左边补空格,显示 a= 1234
    	printf("a=%06d\n", a);//输出6位十进制整数 左边补0,显示 a=001234
    	printf("a=%2d\n", a);//a超过2位,按实际输出 a=1234
    	printf("a=%-6d\n", a);///输出6位十进制整数 右边补空格,显示 a=1234
    	printf("f=%f\n", f);//浮点数有效数字是7位,结果 f=3.141593
    	printf("f=%6.4f\n", f);//输出6列,小数点后4位,结果 f=3.1416
    	printf("x=%lf\n", x);//输出长浮点数 x=0.123457
    	printf("x=%18.16lf\n", x);//输出18列,小数点后16位,x=0.1234567891234567
    	printf("c=%c\n", c);     //输出字符 c=A
    	printf("c=%x\n", c);//以十六进制输出字符的ASCII码 c=41
    	printf("s[]=%s\n", s);//输出数组字符串s[]=Hello,World
    	printf("s[]=%6.9s\n", s);//输出最多9个字符的字符串 s[]=Hello,Wor
    	int i = 10;
    	int errcode = 10;
    
    #if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__))
    #define Log(_t,_f,...) printf("[%-s %4u %-s]%-5s: "##_f##"\n", __FILE__,__LINE__,__FUNCTION__,#_t,##__VA_ARGS__)
    #elif defined(__linux__) || defined(__linux)
    #define Log(_t,_f,...) printf("[%-s %4u %-s]%-5s: "_f"\n", __FILE__,__LINE__,__FUNCTION__,#_t,##__VA_ARGS__)
    #endif
    	Log(Info, "---------%d-------------", i);
    
    #define LOGI(message, ...) printf("\n(%04X)%s[%04d]%16s: " message, (unsigned int)1,__FILE__,__LINE__,__FUNCTION__ ,##__VA_ARGS__);fflush(stdout)
    #define LOGW(message, ...) printf("\n(%04X)%s[%04d]%-16s:: " message, (unsigned int)2,__FILE__,__LINE__,__FUNCTION__ ,##__VA_ARGS__);fflush(stdout)
    #define LOGE(message, ...) printf("\n(%04X)%s[%04d]%-16s::: " message, (unsigned int)3,__FILE__,__LINE__,__FUNCTION__ ,##__VA_ARGS__);fflush(stdout)
    #define LOGF(message, ...) printf("\n(%04X)%s[%04d]%-16s:::: " message, (unsigned int)4,__FILE__,__LINE__,__FUNCTION__ ,##__VA_ARGS__);fflush(stdout)
    
    LOGI("xxxxxxxxxxxxxxxxxxxxxxxxx");
    LOGW("xxxxx    Err:%d  xxxxxxxx", errcode);
    
    	return 0;
    }


    展开全文
  • 格式字符串的形式为: % [输出最小宽度] [.精度] [长度] 类型例如,%d格式符表示 用十进制整形格式输出。%f表示用实型格式输出,%5.2f 格式表示输出宽度为5(包括小数点),并包含2位小数。常用的输出格式及含义如下:...

    格式字符串的形式为: % [输出最小宽度] [.精度] [长度] 类型

    例如,%d格式符表示 用十进制整形格式输出。%f表示用实型格式输出,%5.2f 格式表示输出宽度为5(包括小数点),并包含2位小数。常用的输出格式及含义如下:

    printf 函数文档

    函数概要:

    printf 函数用于打印格式化字符串到标准输出流。

    函数原型:

    #include ...int printf ( const char * format, ... );

    参数解析:

    1、format 参数

    format 参数是一个格式化字符串,由格式化占位符和普通字符组成。

    格式化占位符(以 % 开头)用于指明输出的参数值如何格式化。

    格式化占位符的语法如下:

    %[flags][width][.precision][length]specifier

    每一个格式化占位符均以 % 开始,以转换字符结束。

    specifier(转换字符,必选)的内容及含义如下:

    转换字符

    参数类型;转换结果

    c

    char;字符

    d

    int;有符号十进制整数

    i

    同上

    e

    double;以指数形式输出单、双精度浮点数(小写 e)

    E

    同上(大写 E)

    f

    double;以小数形式输出单、双精度浮点数

    g

    double;以 %f 或 %e 中较短的输出宽度输出单、双精度浮点数(指数显示小写 e)

    G

    同上(指数显示大写 E)

    o

    unsigned int;无符号八进制(无前导 0)

    s

    char *;字符串

    u

    int;无符号十进制

    x

    unsigned int;无符号十六进制(无前导 0x)

    X

    同上(无前导 0X)

    p

    void *;指针值

    n

    int *;存放已写字符的个数

    %

    不进行参数转换;% 自身

    注:如果 % 后边的字符不是转换字符,则其行为没有定义。

    flags(标志,可选)的内容即含义如下:

    标志

    含义

    -

    指定被转换的参数在其字段内左对齐(默认是右对齐)

    +

    指定在输出的数前面加上正负号

    空格

    如果第一个字符不是正负号,则在其前面加上一个空格

    0

    对于数值转换,当输出长度小于字段宽度时,添加前导 0 进行填充

    #

    指定另一种输出形式:

    1. 如果转换字符为 o,则第一个数字为 0

    2. 如果转换字符为 x 或 X,则指定在输出的非 0 值钱加 0x 或 0X

    3. 对于转换字符为 e、E、f、g 或 G 的情况,指定输出总是包含一个小数点。另外,对于转换字符为 g 或 G,还指定输出值尾部无意义的 0 将被保留

    注:flags 可同时出现多个,且无顺序要求。

    width(宽度,可选)是一个数值,用于指定最小字段的宽度

    转换后的参数输出宽度至少要达到这个数值。如果参数的字符数小于该数值,则在参数左边(如果 flags 设置为 -,要求左对齐的话则在右边)填充一些字符。填充字符通常为空格,但是如果 flags 设置为 0,则填充字符为数字 0。

    .precision(.精度,可选),通过点号(.)分隔字段的宽度和精度

    对于字符串,它指定打印的字符的最大个数

    对于整数,它指定打印的数字位数(必要时可加填充位 0 以达到宽度要求)

    对于转换字符为 e、E 或 f,它指定打印的小数点后的数字位数

    对于转换字符为 g 或 G,它指定打印的有效数字位数

    length(长度修饰符,可选)的值可以是 h、hh、l、ll 或 L

    hh 表示将相应的参数按 signed char 或 unsigned char 类型输出

    h 表示将相应的参数按 short 或 unsigned short 类型输出

    l 表示将相应的参数按 long 或 unsigned long 类型输出

    ll 表示将相应的参数按 long long 或 unsigned long long 类型输出

    L 表示将相应的参数按 long double 类型输出

    2、... 附加参数

    该参数的个数由格式化字符串决定。

    每个参数的值应当与前面格式化字符串中的占位符类型和位置一一对应。

    返回值:

    如果函数调用成功,返回值是实际打印的字符数(不包含表示字符串结束的 '\0');

    如果函数调用失败,返回值是一个负数。

    #include

    intmain()

    {int a = 520;char b = 'F';float c = 3.14;double d = 3.141592653;

    printf("鱼C工作室创办于2010年的%d\n", a);

    printf("I love %cishC.com!\n", b);

    printf("圆周率是:%.2f\n", c);

    printf("精确到小数点后9位的圆周率是:%11.9f\n", d);return 0;

    }

    鱼C工作室创办于2010年的520

    I love FishC.com!

    圆周率是:3.14

    精确到小数点后9位的圆周率是:3.141592653

    展开全文
  • #include <stdio.h> #include <...{ //scanf(格式控制字符串,参数地址表); int a,b; //Ane request:空格符 is space character scanf("%d %d",&a,&b); printf("a=%d,b=%d...
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {   //scanf(格式控制字符串,参数地址表);
        int a,b;
        //Ane request:空格符 is space character
        scanf("%d %d",&a,&b);
        printf("a=%d,b=%d",&a,&b);
        //Two request:逗号 is space character input:3 4 out put a=3,b=39
        scanf("%d,%d",&a,&b);
        printf("a=%d,b=%d",&a,&b);
        //Three request:input date 字符串"a="和"b="原样输入,即input a=12,b=34
        scanf("a=%d,b=%d",&a,&b);
        printf("a=%d,b=%d",&a,&b);
        //Four demand  input date限定以下格式1234 同时输出结果a=12,b=34
        scanf("%2d%2d",&a,&b);
        printf("a=%d,b=%d",a,b);
        //Five require 输入数据限定格式12\n34,同时要求程序输入结果为a="12",b="34",该如何
        scanf("%2d%2d",&a,&b);
        printf("a=\"%d\",b=\"%d\"\n",a,b);
        //Six claim 若用户可用任意字符作为分隔符输入数据,
        //*为抑制字符称忽略输入修饰符使得对应的输入项在读入后不赋给任何变量,
        //%c表示以字符型格式输入,%*c表示读入用户键盘键入的字符,但是不赋值给任何变量
        scanf("%d%*c%d",&a,&b);
        printf("a=%d,b=%d\n",a,b);
        //Seven require 用户输入123456
        //%*2d 中*为忽略修饰符,表示对应输入项34在读入后不赋值给任何变量
        //%2d中2位域宽附加格式说明,表示从输入数据中按指定宽度2从输入缓冲区截取输入数据
        scanf("%2d%*2d%2d",&a,&b);
        printf("a=%d,b=%d",a,b);
        //Eight claim 用户输入非法字符12 3a output a=12,b=3
        scanf("%d%d",&a,&b);
        printf("a=%d,b=%d",a,b);
        //Nine: request input:123a output:a=123,b=39
        //explain:函数scanf()未能读入指定的数据项数,怎么判断?通过scanf的返回值EOF 需了解if-else
        scanf("%d%d",&a,&b);
        printf("a=%d,b=%d",a,b);
        //Ten:demand scanf函数未加取地址运算符&
        //编译器误将a值与b值当做地址值,使得数据视图存入这两个地址单元,从而造成非法访问
        //而真正的地址&a,&b内存单元并未被存入数据,即变量a,b未被赋值。
        scanf("%d%d",a,b);
        printf("a=%d,b=%d",a,b);
        //NOTIC:如果函数scanf()的格式控制字符串中存在除格式说明符以外其他字符,
        //那么这些字符必须在输入数据时,由键盘原样输入。
    }
    
    
    展开全文
  • C语言经典入门 第十章 习题2 输入以下四个数值,并计算总和。 [size=16px]$3.50, $ 0.75, $9.95, $2.... #include <stdio.h>...我知道一般情况下,...那在格式控制字符串中已经明确表示忽略空白时,又怎么分割呢?
  • C#字符串格式控制

    2020-04-23 16:06:09
    C#字符串格式控制
  • 第3.11节 format字符串格式化的格式控制 一、 引言 上节介绍了四种format进行字符串格式化的方法,但都只介绍了真实值与格式符的位置映射关系,而没有介绍诸如宽度、对齐方式、精度控制等控制每个真实值显示格式的...
  • ssacanf\Sprintf格式字符串

    千次阅读 2013-12-08 10:50:00
    一、sscanf sscanf() - 从一个 int sscanf(const char *buffer,const char *format,[argument ... format 格式控制字符串  argument 选择性设定字符串  sscanf会从buffer里读进数据,依照argument的设
  • sscanf输入指定格式字符串

    千次阅读 2014-09-18 13:17:48
    函数原型: int sscanf( const char *, const char *, ...); int sscanf(const char *buffer,const char *...format格式控制字符串 argument 选择性设定字符串 sscanf会从buffer里读进数据,依照format的格
  • 格式字符串漏洞

    2021-02-01 14:40:14
    因为格式字符串的传参是通过栈进行的, 但如果实际提供的参数少于格式字符串预期的个数, 多余的控制字符就会把栈数据当做参数打印出来. 比如 #include<stdio.h> int main(){ printf("%s %d %s %x %x %x %3...
  • 格式字符串溢出笔记

    千次阅读 2020-03-24 15:04:34
    当printf在输出格式化字符串的时候,会维护一个内部指针,当printf逐步将格式化字符串的字符打印到屏幕,当遇到%的时候,printf会期望它后面跟着一个格式字符串,因此会递增内部字符串以抓取格式控制符的输入值。...
  • 5.2.4 更进一步控制字符串格式化参数 format方法的功能远不止这些,在一对大括号中添加一些字符串格式化类型符,可以对格式化字符串进行更多的控制。例如,下面的代码会将一个字符串类型的格式化参数值按原样输出、...
  • 格式字符串 1.格式字符串 语法: 带有格式占位符的字符串 % (数据1,数据2,数据3,…) 说明: 1.格式占位符-字符串中不同类型数据的占位符号,固定的。 %s - 字符串格式占位符(任何类的数据都可以赋值) %d - ...
  • Python编程思想(5):格式字符串

    千次阅读 2020-05-21 08:28:57
    4. 更进一步控制字符串格式化参数 前面讲的字符串都是静态的,也就是说,一旦指定一个字符串,就固定不变了。但在很多场景下,需要替换字符串中的某一部分。当然,要实现这种操作最简单的方式就是使用字符串连接,...
  • 格式字符串总结

    2019-11-17 16:05:19
    通过控制格式字符串,可以进行任意地址读和任意地址写。 0x01 任意地址读 先测试需要泄露的地址在栈上的位置,假设位置是??。 任意地址读可将格式字符串控制为:p64(泄露地址)+"%??$s" 0x02 任意地址写 先测试...
  • String.format(String format,Object......参数format接收一个格式控制字符串,该字符串可以包含多个以%开始的格式说明符。 例如: int count =3; //%d代表是用整数替换该占位符,%03d代表该数字...
  • 格式字符串 format string基本介绍 此漏洞由printf类函数在使用时直接使用用户可控字符串作为格式字符串使用所导致。如printf(s),在运行时,用户可以通过给予s特殊的值造成程序崩溃或泄露内存地址,乃至任意...
  • 格式字符串

    2012-12-05 14:35:00
    格式化字符 转换方式%c 转换成字符(ASCII 码值,或者长度为一的字符串)%ra 优先用repr()函数进行字符串转换%s 优先用str()函数进行字符串转换%d / %i 转成有符号十进制数%ub 转成无符号十进制数%ob 转成无符号八进制...
  • Python中内置的%操作符可用于格式化字符串操作,控制字符串的呈现格式。Python中还有其他的格式化字符串的方式,但%操作符的使用是最方便的。另外python还有一个更强大的字符串处理函数 也就是我们要说的 str.format...
  • 我有这个代码(在字符串中打印所有排列的出现)def splitter(str):for i in range(1, len(str)):start = str[0:i]end = str[i:]yield (start, end)for split in splitter(end):result = [start]result.extend(split)...
  • pwn-格式字符串漏洞

    2020-09-07 23:14:52
    看一下几个经常用来测试格式化字符串格式控制符%d 用于读取10进制数值 %x 用于读取16进制数值 (这两个都可以起到泄露信息的作用)%s 用于读取字符串值 即泄露任意地址信息 (%d,%x只能泄露原有栈的内容,结合%s就...
  • 格式字符串-%

    2018-12-26 09:23:10
    %s 字符串 (采用str()的显示) %r 字符串 (采用repr()的显示) %c 单个字符 %b 二进制整数 %d 十进制整数 %i 十进制整数 %o 八进制整数 %x 十六进制整数 %e 指数 (基底写为e) ...
  • 1、% %.2f 浮点数显示保留小数点后两位 %04d 如果一个整数的长度不足4位,在其前面补0。...‘{:.2f}’.format(3.1415926),在’ '.format()用法中,如果想要控制显示的格式,需要加 “:”。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,484
精华内容 2,193
关键字:

格式控制字符串