puts()函数和printf函数的区别
输入和输出函数的区别
输入输出函数区别如下:一、printf 、sprintf、fprintf的区别1.1 都是把格式好的字符串输出,只是输出的目标不一样:1)、printf,是把格式字符串输出到标准输出(一般是屏幕、控制台,可以重定向),是和标准输出文件(stdout)关联的;原型为: int printf(const char *format[,argument]...);2)、sprintf,是把格式字符串输出到指定的字符串中,所以参数比printf多一个char*。
这是目标字符串地址;原型为:int sprintf(char *buffer,const char *format[,argument]...);3)、fprintf,是把格式字符串输出到指定文件设备中,fprintf是格式化输出到一个stream,通常是到文件,所以参数比printf多一个文件指针FILE*;原型为:int fprintf(FILE *stream,const char *format[,argument]...);1.2. Fprintfc语言把文件看作一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。
根据数据的组成形式,可分为ASCLL文件和二进制文件。
ASCLL文件又称为文本文件(text),它的每个字节放一个ASCLL代码,代表一个字符。
二进制文件是内存中的数据按其在内在中的存储形式原样输出到磁盘上存放。
1).fprintf(fp,"%d",buffer);是将格式化的数据写入文件;fprintf(文件指针,格式字符串,输出表列);fwrite(&buffer,sizeof(int),1,fp); 是以二进位方式写入文件fwrite(数据,数据类型大小(字节数),写入数据的最大数据,文件指针); 由于fprintf写入是,对于整数来说,一位站一个字节,比如1,占1个字节;10,占2个字节;100,占3个字节;10000,占5个字节;所以文件的大小会随数据的大小而改变,对大数据空间占用很大。
C语言常用数学函数
C语言常用数学函数1.数学函数:如sqrt、sin、cos、tan、exp、log等,可用于处理数学运算。
比如:x表示需要计算平方根的数值。
sqrt函数会返回x的正平方根,如果x是负数,则返回NaN(Not a Number)。
exp用于计算一个数的自然指数值(以e为底的指数)。
log函数返回x的自然对数,即ln(x)。
Doubl esqrt(doublex);2.字符串函数:如strcpy、strncpy、strcat、strcmp、strlen等,用于处理字符串。
strcpy用于将一个字符串复制到另一个字符串中。
dest表示目标字符串的起始地址,src表示源字符串的起始地址。
当使用strcpy函数进行字符串复制时,必须确保目标字符串空间足够大,否则可能会导致内存访问越界等问题。
char*strcpy(char*dest,constchar*src);strncpy用于将一个字符串的部分内容复制到另一个字符串中。
,n表示需要复制的字符个数。
如果源字符串长度小于n,则目标字符串将被填充一些空字符直到长度为n。
char*strncpy(char*dest,constchar*src,size_tn);strcat用于将一个字符串连接到另一个字符串的末尾。
strcmp用于比较两个字符串的大小关系。
strlen用于计算一个字符串的长度(即包含多少个字符)。
注意的是,strlen函数不会计算空字符'\0'的长度。
3.文件操作函数:如fopen、fclose、fread、fwrite、fgets 等,可用于文件的读取和写入。
4.内存函数:如malloc、calloc、realloc、free等,用于动态内存分配和释放。
malloc用于动态分配内存空间。
free用于释放动态分配的内存空间。
5.格式化函数:如printf、scanf、sprintf、sscanf等,用于输入输出和格式化字符串。
C语言的格式化输入输出
字符数组中,在输入时以非空白字符
s
开始,以第一种空白字符结束。字符
串以串结束标志'\0'作为最终一种字
符。
• 用来输入实数,能够用小数形式或指
Eg212.c
main( ) {
int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d\n",a,b,c); printf("a+b+c=%d",a+b+c); }
注意:格式控制符旳个数与背面旳参数个数应 相等,且前后位置要一一相应。
Eg210.c Eg211.c
3、一般字符串与格式控制符混合使用
格式控制符用背面相应位置旳常量、 变量或体现式旳值替代,其他一般字符 一律原样显示。
main( ) {
printf("2+3=%d, 2*3=%d\n",2+3,2*3); }
格式化输入输出函数 printf( )/scanf( )
字符输入输出函数
getchar( )/putchar( )
getchar( )和putchar( )是一对用于单 个字符输入输出旳原则函数。
一、putchar( )函数
功能:在终端旳目前位置输出一种字符
格式:putchar(字符变量) 或 putchar('输出字符')
在程序开始用命令行#include <stdio.h> 把要使用旳信息包括到顾客程序中。
因为printf和scanf函数使用频繁, 系统允许使用时不加#include命令。
C语言旳函数库中有一批“原则 输入输出函数”,它们以原则旳输入 输出设备为输入输出对象。
c语言中puts的用法举例
c语言中puts的用法举例C语言中puts的用法C语言是一种广泛使用的编程语言,而puts函数(put string)则是其中一个常用功能强大的函数。
puts函数主要用于在控制台输出字符串,并自动在字符串末尾添加换行符。
本文将以实例来解释和展示C语言中puts函数的用法。
一级段落标题:puts函数的基本用法在C语言中,我们可以使用puts函数来显示字符串,其基本语法为:```cint puts(const char *str);```这里,`const char *str`表示传递给puts函数的字符串参数。
该函数在显示完字符串后会自动添加一个换行符。
它返回一个非负整数值来指示操作是否成功,如果成功,则返回非负值;否则返回EOF(-1),表示出错。
下面是一个简单的示例程序,在程序中使用了puts函数来输出`Hello, World!`:```c#include <stdio.h>int main() {puts("Hello, World!");return 0;}```以上代码会在控制台输出:```Hello, World!```通过这个简单的例子我们可以看到,使用puts函数可以快速方便地打印出字符串。
二级段落标题:换行符与特殊字符问题当需要输出含有换行符或其他特殊字符(比如制表符)的字符串时,我们需要注意它们在C语言中所代表的转义序列。
例如,在输出带有换行符的字符串时,我们可以使用`\n`来表示换行符,如下所示:```c#include <stdio.h>int main() {puts("Hello,\nWorld!");return 0;}```以上代码会在控制台输出:```Hello,World!```同样地,可以使用`\t`来表示制表符等特殊字符。
二级段落标题:显示变量值除了输出固定的字符串外,puts函数也可以用于显示变量的值。
DSP 调用 C 输入输出函数 scanf() printf() gets() puts() zz
DSP 调用C 输入输出函数scanf() printf() gets() puts() zz1.1 标准输入输出函数1.1.1 格式化输入输出函数Turbo C2.0 标准库提供了两个控制台格式化输入、输出函数printf( ) 和scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格式读写数据。
printf()函数用来向标准输出设备(屏幕)写数据; scanf() 函数用来从标准输入设备(键盘)上读数据。
下面详细介绍这两个函数的用法。
一、printf()函数printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
在编写程序时经常会用到此函数。
printf()函数的调用格式为:printf("<格式化字符串>", <参量表>);其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。
1. 格式化规定符Turbo C2.0提供的格式化规定符如下:━━━━━━━━━━━━━━━━━━━━━━━━━━符号作用——————————————————————————%d 十进制有符号整数%u 十进制无符号整数%f 浮点数%s 字符串%c 单个字符%p 指针的值%e 指数形式的浮点数%x, %X 无符号以十六进制表示的整数%0 无符号以八进制表示的整数%g 自动选择合适的表示法━━━━━━━━━━━━━━━━━━━━━━━━━━说明:(1). 可以在"%"和字母之间插进数字表示最大场宽。
c++ print用法
c++ print用法
在C++中,有多种方法可以输出内容到终端。
以下是几种常见的打印输出方法:
1. 使用cout和<<运算符:
```cpp
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
```
在这个例子中,使用了iostream库中的cout对象来输出字符串"Hello, World!"。
通过<<运算符可以连续输出多个内容。
2. 使用printf函数:
```cpp
#include <cstdio>
int main() {
printf("Hello, World!\n");
return 0;
}
```
与C语言中的用法类似,也可以使用printf函数来打印输出。
需要包含头文件cstdio。
3. 使用puts函数:
```cpp
#include <cstdio>
int main() {
const char* str = "Hello, World!";
puts(str);
return 0;
}
```
puts函数可以直接输出字符串。
这些只是C++中几种常见的打印输出方法,还有其他方法可根据具体需求选择。
C++常用的输入输出函数
// 接受一个字符串,可以接 输入:jkljkljkl
收空格并输出,需包含 “#include<string>”
#include<iostream>
#include<string>
输出:jkljkljkl
输入:jkl jfksldfj jklsjfl 输出:jkl jfksldfj jklsjfl
\f 清屏并换页 \r 回车 \t Tab符 \xhh 表示一个ASCII码用16进表示
%p 指针的值
%e 指数形式的浮点数
%x, %X 无符号以十六进制表示的整数
%o 无符号以八进制表示的整数
%g 自动选择合适的表示法
using namespace std;
int main ()
{
char ch;源自ch = getchar(); //不能写成getchar(ch);
cout<<ch<<endl;
}
输入:jkljkljkl 输出:j
1. cout<<与控制符 2. puts() 3. putch() 4. putchar() 5. printf() // C函数
描述 置基数为10 置基数为16 置基数为8 填充字符为c 显示小数精度为n位 设域宽为n个字符
左对齐 右对齐
#include <iostream>
#include <iomanip> //要用到格式控制符
using namespace std;
int main(){
double amount = 22.0/7;
最常见的输出方法,标准输出
puts(1)的用法
puts()的用法一、puts()的基本用法在编程中,puts()是一个常用的函数,特别是在C语言和类似语言中。
它被用来将指定字符串输出到终端或屏幕上。
在本文中,我们将详细介绍puts()函数的用法以及如何正确地使用它。
1. puts()函数的语法和参数puts函数的完整语法如下所示:```int puts(const char *str);```其中,str是要输出的字符串,它被称为字符串参数。
2. 使用puts()函数输出字符串要使用puts()函数输出字符串,在调用函数时需要将要输出的字符串作为参数传递给puts()。
```#include <stdio.h>int main(){char str[] = "Hello, World!";puts(str);return 0;}```以上代码实现了将字符串"Hello, World!"输出到屏幕上。
当我们运行这段代码时,屏幕上会显示"Hello, World!"。
3. 注意事项在使用puts()函数时,需要注意以下几点:- 字符串必须以空字符'\0'结尾。
否则,结果可能不正确或导致程序崩溃。
比如,在上述例子中,定义的字符数组str会自动包含空字符'\0',这样就可以直接作为参数传递给puts()。
- puts()自动在输出末尾添加换行符('\n')。
因此,在使用puts()输出字符串之后,默认会进行换行。
如果不想换行,可以使用其他输出函数,比如printf()。
- puts()函数只能用于输出字符串。
如果尝试输出其他类型的数据,会导致编译错误。
二、puts()的高级用法除了基本的字符串输出功能外,puts()还具有一些高级用法,使得程序员能够更灵活地使用这个函数。
1. 输出多行字符串通过使用puts()函数和换行符('\n'),我们可以方便地输出多行字符串。
C语言四大内置输出函数你知多少?C语言基础之输出函数
C语言四大内置输出函数你知多少?C语言基础之输出函数前言上一栏目主要讲解了各种数据类型的知识,大家先闭眼回顾一下数据类型的知识哦。
本章节主要内容是讲解程序的基本交互设计之程序的输出。
程序和人交互无非就是通过外设进行输入信息,C语言中基本的交互的基本流程如下:•用户的键盘操作•程序接受键盘的值•输出相关信息到屏幕,示意反馈C语言内置输出函数C语言提供内置函数来执行输出操作。
输出操作用于在用户屏幕(输出屏幕)或打印机或任何文件上显示数据。
c编程语言提供以下内置输出功能:1.printf():全能型输出2.putchar():字符输出3.puts():字符串输出4.fprintf():格式化输出C语言printf()函数printf()函数用于在输出屏幕(用户屏幕)上打印字符串或数据值或字符串和数据值的组合。
printf()函数是在名为“ stdio.h ” 的头文件中定义的内置函数。
当我们想在程序中使用printf()函数时,我们需要使用#include语句包含相应的头文件(stdio.h)。
printf()函数具有以下语法:printf(“要显示的消息”);在上面的示例程序中,我们使用printf()函数将字符串(I love you)打印到输出屏幕上。
printf()函数还可用于显示字符串和数据值基本格式:printf(“原样输出内容+格式控制字符”,变量名表),而对于不同的数据有不同的格式控制字符,其实格式控制字符相当于一种占位符。
C语言中格式控制字符常用的主要有以下:1.int : %d2.float: %f3.double:%lf4.char:%c5.字符串:%s6.十六进制:%x7.八进制:%o8.指针类型:%p9.无符号整形:%u还有一些比较少用的在这里就不列举不出来。
printf()函数的返回值C语言中的每个函数都必须具有返回值。
printf()函数也有一个整数作为返回值。
printf()函数返回一个等于它打印的字符总数的整数值。
数据输入、输出的概念
其中方括号[]中的项为可选项。 1. 类型字符 用以表示输出数据的类型:
C语言中输出不同数据,使用不同的类型字符,
例如:输出整型数据,使用的类型符 d,i (小写)
格式输出函数printf( )
表示输出类型的格式字符及 意义 d, i 以十进制形式输出带符号整数(正数不输出符号)
当程序运行后:输入ABCDEF ,输出为:
二、字符(串)键盘输入/屏幕输出
2. getch() 它与getchar()函数的区别是输入不需要回车键结束,即输入 一个字符就自动结束输入。它们的调用格式为: getch(); 该函数不将读入的字符回显 在显示屏幕上,利用回显和不回 显的特点,它经常用于交互输入 的过程中完成暂停等。 在调试程序时,也经常可在 main函数最后增加一个getch(); 以直接观察程序的运行结果而不 必每次都使用Alt+F5切换窗口
%[*][输入数据宽度][长度]类型字符
其中有方括号[]的项为任选项。各项的意义如下: (1) 类型字符 表示输入数据的类型,其格式符和意义如下所示: d 输入十进制整数 o 输入八进制整数 x 输入十六进制整数 u 输入无符号十进制整数 f或e 输入实型数(用小数形式或指数形式) c 输入单个字符 s 输入字符串
二、字符(串)键盘输入/屏幕输出
4. 输入字符串函数——gets()函数:
字符串输入函数gets 格式:
gets (st)
功能:从标准输入设备键盘上输入一个字符串。本函数 得到一个函数值,即为该字符数组的首地址。 说明:gets函数并不以空格作为字符串输入结束的标志,而 只以回车作为输入结束。这是与scanf(“%s”,…)函数不同的。
puts和gets的用法
puts()和gets()函数1.1.2 非格式化输入输出函数非格式化输入输出函数可以由上面讲述的标准格式化输入输出函数代替, 但这些函数编译后代码少, 相对占用内存也小, 从而提高了速度, 同时使用也比较方便。
下面分别进行介绍。
一、puts()和gets()函数1. puts()函数puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为:puts(s);其中s为字符串变量(字符串数组名或字符串指针)。
puts()函数的作用与语printf("%s\n", s)相同。
例4:main(){char s[20], *f; /*定义字符串数组和指针变量*/strcpy(s, "Hello! Turbo C2.0"); /*字符串数组变量赋值*/f="Thank you"; /*字符串指针变量赋值*/puts(s);puts(f);}说明:(1). puts()函数只能输出字符串, 不能输出数值或进行格式变换。
(2). 可以将字符串直接写入puts()函数中。
如:puts("Hello, Turbo C2.0");2. gets()函数gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符不属于这个字符串。
其调用格式为:gets(s);其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s) 函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束, 空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符串直到回车为止。
例5main(){char s[20], *f;printf("What's your name?\n");gets(s); /*等待输入字符串直到回车结束*/puts(s); /*将输入的字符串输出*/ puts("How old are you?");gets(f);puts(f);。
c语言的标准输入输出语句
c语言的标准输入输出语句在C语言中,标准输入输出语句主要包括以下几种:1.`printf()`:这是一个标准输出函数,用于在屏幕上显示文本。
例如:```cprintf("Hello,World!\n");```2.`scanf()`:这是一个标准输入函数,用于从键盘获取用户输入。
例如:```cint num;printf("Enter a number:");scanf("%d",&num);```3.`getchar()`和`putchar()`:这两个函数分别用于读取和写入单个字符。
例如:```cchar c;printf("Enter a character:");c=getchar();printf("You entered:%c\n",c);```4.`gets()`和`puts()`:这两个函数分别用于读取和写入字符串。
但是,`gets()`函数已被废弃,因为它可能导致缓冲区溢出。
建议使用`fgets()`代替。
例如:```cchar str[50];printf("Enter a string:");gets(str);printf("You entered:%s\n",str);```5.`fgets()`和`fputs()`:这两个函数用于从文件读取和写入字符串。
例如:```cFILE*fp;fp=fopen("file.txt","w");if(fp!=NULL){fputs("Hello,World!\n",fp);fclose(fp);}```6.`fprintf()`和`fscanf()`:这两个函数用于向文件写入和从文件读取格式化的数据。
例如:```cFILE*fp;int num=42;fp=fopen("file.txt","w");if(fp!=NULL){fprintf(fp,"The number is%d\n",num);fclose(fp);}```。
C语言的标准输入输出
C语⾔的标准输⼊输出欢迎探讨,如有错误敬请指正如需转载,请注明出处 /nullzx/1. 标准输⼊输出标准输⼊、输出主要由缓冲区和操作⽅法两部分组。
缓冲区实际上可以看做内存中的字符串数组,⽽操作⽅法主要是指printf、scanf、puts、gets,getcha、putcahr等操作缓冲区的⽅法。
在C++以及Java等⾯向对象的编程语⾔中,将缓冲区以及操作缓冲区的⽅法封装成⼀类对象,这类对象就称为流。
缓冲区最⼤的特点主要体现在数据的⼀次性,即数据被printf、scanf从缓冲区中取出后就被使⽤了,或者说消耗了。
可以把缓冲区⽐喻成管道,缓冲区中的数据⽐喻成⽔流,printf、scanf等⽅法⽐喻成开关,当打开开关,⽔就会慢慢流逝,⽽流出去的⽔就再也收不回来了。
由于不同系统,不的硬件底层实现输⼊输出的具体⽅法可能不⼀样,C语⾔要求系统为每个程序提供两个指针,这两个指针分别指向两个结构体,这两个结构体分别表⽰了键盘和屏幕在内存中的抽象表⽰(缓冲区的地址值被记录在这个结构体中),并将指向这两个结构体的指针命名为stdin和 stdout.这两个指针就是所谓的标准输⼊和标准输出。
还有⼀点应该始终铭记,标准输⼊和输出缓冲区中存储的是字符的ASCII码值。
⽐如你想从键盘上输⼊了123给⼀个变量,那么在缓冲区中存储是三个字节,分别是字符‘1’的ASCII码值,字符‘2’的ASCII码值,字符‘3’的ASCII码值,然后将这个这三个ASCII值序列转换为⼀个数值给这个变量。
同理,从屏幕输出“123”,计算机并不认为它输出的是⼀个数值,计算机实际上仅仅是描绘了⼀个‘1’的ASCII码值对应的图形,‘2’的ASCII的值对应的图形,‘3’的ASCII码值对应的图形。
2. getchar、putcharputchar的作⽤主要是向输出缓冲区中写⼊⼀个字符。
getchar的作⽤主要是向输⼊缓冲区中读取⼀个字符。
如果碰到⽂件结尾,返回-1getchar源代码int getchar(void){static char buf[BUFSIZ];static char* bb = buf;static int n = 0;if (n == 0) {n = read(0, buf, BUFSIZ);bb = buf;}return(--n >= 0) ? (unsigned char)*bb++ : EOF;}OEF是⼀个宏,表⽰-1。
字符型数据以及字符串的输入与输出和函数
字符型数据以及字符串的输⼊与输出和函数空⽩符:空格,回车,制表符等等。
1、字符型数据(单个数据的输⼊)。
(1)scanf输⼊,遇到回车,空格,tab键会记录进去,使得⼀个字符的内容变为空格这类的字符,eg:输⼊格式:5M解决⽅法:(1)getchar();处理⼀个字符。
%*c赋值抑制符,跳过⼀个字符,读⼊但不存储。
scanf("%d",&n);getchar();scanf("%c",&M);(2)跳过多个空⽩字符在格式传中的 %c之前加上空格或者在%d之后加上空格scanf("%d",&n); scanf("%d ",&n);scanf(" %c",&M); scanf("%c",&M);2、字符数组与字符串通常⽤⼀个字符数组来存储⼀个字符串。
字符串和普通字符数组的区别在于字符串末尾有⼀个空字符'\0'. 空字符不计⼊字符串有效字符,也不计⼊总长度字符串的循环遍历条件:s【i】!=‘\0’字符串的输⼊与输出所有的字符串操作针对的其实是字符数组,因为字符串是⽆法直接定义的。
char name[100];(1)⽤%s整体输⼊/输出scanf(“%s”,name);printf(“%s”,name);注意:该格式读⼊的数据中不能含有空⽩符,所有的空⽩符都会被当做数据结束的标志。
(2)gets()和puts()函数gets(name);遇到换⾏符或⽂件结束标志会结束读⼊。
换⾏符不作为读取字符串的内容,换⾏符会被转黄伟字符串结束标志‘|0’.puts():输出字符串并⾃动换⾏,该函数只能输出字符串。
printf():通过格式控制符%s输出字符串,不能⾃动换⾏。
除了字符串,printf() 还能输出其他类型的数据。
gets和scanf的区别1、 gets可以接收空格;⽽scanf遇到空格、回车和Tab键都会认为输⼊结束,所有它不能接收空格。
C语言中puts()和printf()区别
C语⾔中puts()和printf()区别puts的功能更加单⼀,只能输出字符串;printf的功能更加⼴,可以格式化数据,输出多种类型的数据。
puts()函数⽤来向标准输出设备(屏幕)写字符串并换⾏。
调⽤⽅式为puts(string);其中,string是字符串字符(字符串数组名或字符串指针)。
# include <stdio.h>
int main(){
string a = "happy new year!";
puts(string);
return 0;
}
printf()函数是格式化输出函数,⼀般⽤于向标准输出设备按规定输出信息
printf()函数调⽤格式为:printf("<格式化字符串>",<参量表 >);
它是C语⾔中产⽣格式化输出的函数,⽤于向终端输出字符。
#include<stdio.h>
int main(){
a = 10;
printf("⼩明今年%d岁",a);
return 0;
}。
puts函数的用法
puts函数的用法
一、简介
puts函数是Ruby语言中的一个输出方法,用于向控制台输出字符串。
puts函数会自动在输出的字符串末尾添加一个换行符。
二、语法
puts [expression, ...]
其中,expression可以是任何数据类型,包括字符串、数字、布尔值等。
三、示例
1. 输出字符串
puts "Hello, Ruby!"
2. 输出变量
name = "Tom"
puts "My name is #{name}."
3. 输出数字
puts 1234
4. 输出布尔值
puts true
puts false
5. 输出数组和哈希表
arr = [1, 2, 3]
hash = {a: 1, b: 2}
puts arr
puts hash
四、注意事项
1. 如果需要在输出的字符串中插入变量,可以使用#{variable}的方式。
2. 如果需要输出多个表达式,可以用逗号隔开。
3. 如果在输出时需要控制换行符的数量,可以使用print函数代替puts函数。
五、总结
通过以上介绍,我们了解了puts函数的基本用法,并且了解到了一些注意事项。
在实际开发中,我们经常需要使用该函数来输出调试信息或者用户提示信息。
因此熟练掌握该函数的用法对于Ruby开发人员来说是非常重要的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
puts()函数和printf函数的区别
puts()函数只用来输出字符串,没有格式控制,里面的参数可以直接是字符串或者是存放字符串的字符数组名。
printf()函数的输出格式很多,可以根据不同格式加转义字符,达到格式化输出。
puts()函数的作用与语句printf("%s\n",s);的作用形同。
例子:
①:
#include <stdio.h>
int main( void )
{
puts( "Hello world from puts!" ); //字符串,最后隐含带有'\0'字符
}
Output
Hello world from puts!
②:
main()
{
static char a[] = {'H','I','!','!'};
puts(a);
}
则输出Hi!!烫烫烫烫烫烫烫烫烫烫烫烫dhaklhdwuhdaghdagdak... (后面都是乱码)
原因: a在结尾处缺少一个空字符('\0'), 所以它不是一个串,这样, puts() 就不知道什么时候停止输出, 它将会把 a 后面内存单元中的内容都打印出, 直到它在什么地方碰到了一个空字符为止。
③:
//==============
cat hello.c
#include <stdio.h>
int main(void)
{
printf("hello world!\n");
}
//========================
gcc -S hello.c -o hello.s 生成汇编代码
//========================
cat hello.s
//=========================
.file "hello.c"
.section .rodata
.LC0:
.string "hello world!"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $4, %esp
movl $.LC0, (%esp)
call puts //========这里不是printf
addl $4, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 (Ubuntu 4.1.2-0ubuntu4)" //=======gcc版本.section .note.GNU-stack,"",@progbits
修改printf()的参数后
//==========================
#include <stdio.h>
int main(void)
{
printf("hello world! addr=0x%08x\n",printf);
}
//==========================
gcc -S hello.c
//======================
cat hello.s
//===========.file "hello.c"
.section .rodata
.LC0:
.string "hello world! addr=0x%08x\n"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $20, %esp
movl $printf, 4(%esp)
movl $.LC0, (%esp)
call printf //=================编译后的汇编代码已经是printf了
addl $20, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 (Ubuntu 4.1.2-0ubuntu4)"
.section .note.GNU-stack,"",@progbits
原因:puts()函数的作用与语句printf("%s\n",s);的作用形同。
gcc可能对其进行了优化。