重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在这里总结宏的使用方法 欢迎补充
创新互联,为您提供成都网站建设公司、成都网站制作、网站营销推广、网站开发设计,对服务成都航空箱等多个行业拥有丰富的网站建设及推广经验。创新互联网站建设公司成立于2013年,提供专业网站制作报价服务,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏心悦目的作品。 与客户共同发展进步,是我们永远的责任!
1 条件include
如下
CODE
#ifndef MAIN_H_
#define MAIN_H_
其它内容
#endif
上面在看到头文件时会看到 作用就是阻止这个头文件被多次include
多次include就会出现重复的定义情况 所以需要在每个头文件中都使用这个定义
如果还不是很了解要怎样使用 可以看看 c的标准头文件 如fcntl.h
2 条件编译
如下
CODE
#ifdef _DEBUG
printf("this debug info\n");
#endif
如果没有定义_DEBUG宏的话 那么上面那一行是不会编译进去的
但是定义了_DEBUG后 上面那行就会编译进去 可以写个简单的程序测试
CODE
#include stdio.h
int main()
{
#ifdef _DEBUG
printf("hello world\n");
#else
printf("no debug");
#endif
return 0;
}
第一次使用 gcc -D_DEBUG main.c
第二次使用 gcc main.c
运行两次的结果看
3 定义为某个值 以便后面修改这个值时不用修改其它地方代码 只要修改这个宏的定义就可以了
如一个软件的多语言版本等
如下
CODE
#include stdio.h
#define PRINT_STR "你好 DD"
main(){
printf(PRINT_STR);
return 0;
}
编译时 会把PRINT_STR代替成"你好 DD"
以后想修改时就方便了
另外也可以定义为函数
#include stdio.h
#ifdef _DEBUG
#define A(x) a(x)
#else
#define A(x) b(x)
#endif
int a(int x)
{
return x+1;
}
int b(int x){
return x+100;
}
int main(){
printf ("A(10) value is %d",A(10));
return 0;
}
[/code]
其实也可以定义成
#define A a
的
但是 定义成A(x)后 只有A后面带一个(x)类型的 编译器才会执行替换 比较安全 可以保证只替换函数而不替换变量
第四个
可变参数宏
有些时候定义一个宏来代替某个函数 但是这个函数是可变参数的话 那就需要考虑办法了
定义方法如下
CODE
#define PRINT(...) printf(__VA_ARGS__)
#include stdio.h
int main(){
PRINT("%d %s %s",1,"吃饭了吗 smile MM:)","\n");
return 0;
}
第五个 宏组合
也就是## 和 #的用法
## 是连接符号 连接两个宏
#是把名字代替成字符串
如下
CODE
#define s5(a) supper_ ## a
#include stdio.h
void supper_printf(const char* p )
{
printf("this is supper printf:\n%s\n",a);
}
int main()
{
s5(printf)("hello owrld");
return 0;
}
#用法如下
#include stdio.h
#define s(p) #p
int main(){
printf(s(p)"\n");
return 0;
}
运行一下就知道了
最后 附上网上找到的宏定义的概念
第一篇
第九章 预处理命令
预处理的概念:编译之前的处理
C的预处理主要有三个方面的内容:宏定义、文件包含、条件编译
预处理命令以符号“#”开头。
9.1 宏定义
9.1.1 不带参数的宏定义
宏定义又称为宏代换、宏替换,简称“宏”
格式:
#define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为“宏名”
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。
即在对相关命令或语句的含义和功能作具体分析之前就要换,“不管三七二十一,先换了再说”。
那么剩下的问题就简单了:
1 把谁换掉?2 换成什么?
#define PI 3.1415926
把程序中出现的PI全部换成3.1415926
li9_1.c
说明:(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。
例如:数组大小常用宏定义
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
(6)可以用#undef命令终止宏定义的作用域
(7)宏定义可以嵌套
li9_2.c
(8)字符串""中永远不包含宏
(9)宏定义不分配内存,变量定义分配内存。
9.1.2 带参数的宏
除了一般的字符串替换,还要做参数代换
格式:
#define 宏名(参数表) 字符串
例如:#define S(a,B) a*b
area=S(3,2);第一步被换为area=a*b;,第二步被换为area=3*2;
类似于函数调用,有一个哑实结合的过程
li9_3.c
(1)实参如果是表达式容易出问题
#define S® r*r
area=S(a+B);第一步换为area=r*r;,第二步被换为area=a+b*a+b;
正确的宏定义是#define S® ®*®
(2)宏名和参数的括号间不能有空格
(3)宏替换只作替换,不做计算,不做表达式求解
(4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
(5)宏的哑实结合不存在类型,也没有类型转换。
(6)函数只有一个返回值,利用宏则可以设法得到多个值
li9_4.c
(7)宏展开使源程序变长,函数调用不会
(8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
li9_5.c
分析该例中的"
9.2 “文件包含”处理
一个文件包含另一个文件的内容
格式:
#include "文件名"
或
#include 文件名
编译时以包含处理以后的文件为编译单位,被包含的文件是源文件的一部分。
li9_6a.c li9_6b.c
编译以后只得到一个目标文件.obj
被包含的文件又被称为“标题文件”或“头部文件”、“头文件”,并且常用.h作扩展名。
修改头文件后所有包含该文件的文件都要重新编译
头文件的内容除了函数原型和宏定义外,还可以有结构体定义,全局变量定义
(1)一个#include命令指定一个头文件
(2)文件1包含文件2,文件2用到文件3,则文件3的包含命令#include应放在文件1的头部第一行。
(3)包含可以嵌套
(4)文件名称为标准方式,系统到头文件目录查找文件
"文件名"则先在当前目录查找,而后到头文件目录查找
(5)被包含文件中的静态全局变量不用在包含文件中声明。
9.3 条件编译
有些语句行希望在条件满足时才编译。
格式:(1)
#ifdef 标识符
程序段1
#else
程序段2
#endif
或
#ifdef
程序段1
#endif
当标识符已经定义时,程序段1才参加编译。
格式:(2)
#ifndef 标识符
格式:(3)
#if 表达式
li9_7.c
使用条件编译可以使目标程序变小,运行时间变短。
预编译使问题或算法的解决方案增多,有助于我们选择合适的解决方案。
第7章 预处理程序�
7.1什么是预处理程序
�
预处理程序是一些行首以#开始的特殊语句,例如:#include,#define等就是预处理语句。在编译程序的编译过程中,进行其它编译处理(词法分析、语法分析、代码生成、优化和连接等)之前,先进行这些语句的分析处理。
预处理语句使用的目的在于帮助程序员编写出易读、易改、易移植并便于调试的程序。预处理语句主要有四种:
宏定义和宏替换、文件包含、条件编译和行控制。
预处理语句的作用范围是从被定义语句开始直至被解除定义或是到包含它的文件结术为止均有效。
7.2宏定义和宏替换�
“宏”是借用汇编语言中的概念。为的是在C语言程序中方便的作一些定义和扩展。这些语句以#define开头,分为两种:符号常量的宏定义和带参数的宏定义。
1.符号常量的宏定义和宏替换�
符号常量的宏定义语句是一般格式:�
#define 标识符 字符串�
其中标识符就叫作宏名称。
注意:标识符与字符串之间不要用‘=’,结尾不要加‘;’。�
2.带有参数的宏定义及其替换�
复杂的宏定义带有参数列表,参数列表中可有不止一个参数,其一般格式:�
#define 标识符(参数列表) 字符串�
对带有参数的宏定义进行宏替换时,不仅对宏标识符作字符串替换,还必须作参数的替换。
例如:�
#define SQ(x) ((x)*(x))�
那么SQ(a+B)将被宏替换成(a+B)*(a+B)。�
宏定义也可嵌套使用,即一个宏定义可用另一个宏定义来定义。例如:�
#define SQ(x) ((x)*(x))�
#define CUBE(x) (SQ(x)*(x))�
3.宏定义类函数�
宏定义常用于把直接插入的代码来代替函数,以提高执行效率。这一类的宏,就称做宏定义类函数,例如:�
#define MIN(x,y) (((x)<(y))?(x):(y))�
有了这样的宏之后,就可以直接引用,例如:�
m=MIN(a,B);�
这语句将被预处理成:�
m=(((a)<(B))?(a):(B));�
7.3文件包含�
文件包含是指一个程序文件将另一个指定义文件的内容包含进来,用#include语句来说明。
一般有两种格式:�
(1) #include <文件名>�
(2) #include 〃文件名〃�
第一种,用尖括号表示在标准库目录下找该文件;第二种,用双引号表示先在当前目录(源文件所在目录)中找包含文件,若找不到,再到标准库目录中找。系统的标准库文件都是.h文件。例如:�
#include <stdio.h> /* 标准输入输出的基本常量和宏或函数文件 */�
#include <string.h> /* 串函数文件 */�
#include <malloc.h> /* 内存分配函数文件 */�
#include <ctype.h> /* 字符函数文件 */�
#include <math.h> /* 数学函数库文件 */�
用文件包含,可以减少重复工作,提高程序正确性,还便于维护修改。程序员可以把自己常用的一些符号常量、类型定义和带参数的宏定义,以及一些常用自编函数都放在.h文件中,通过#include语句包含引用之。�
7.4条件编译�
提供条件编译措施使同一源程序可以根据不同编译条件(参数)产生不同的目录代码,其作用在于便于调试和移植。�
条件编译控制语句有不同形式,下面分别讨论。�
1.#ifdef语句及其使用�
一般格式:�
#ifdef 标识符�
语句块1�
#else�
语句块2�
#endif�
7.4格式化输入/输出
�
格式化的控制台I/O函数有两种,它们都与标准I/O库有关。源程序开头应包含标准输入输出头文件:�
#include <stdio.h>�
1.printf()�
printf()函数功能为按指定格式输出显示各种基本类型数据,其一般格式:�
printf(“控制串”,参数列表)�
控制串分两部分,即:要显示的字符和格式串。格式串以“%”开头,后跟格式码。格式串与参数一一对应。
2.scanf()�
scanf()的功能是读入各种类型数据,并自动将其转换为恰当的格式,其一般格式为:� scanf(“控制串”,参数列表)�
控制串与前述printf()中的控制串类似,也包含有以“%”开头加格式码组成的格式串。参数列表所列出的应当是变量的地址,而不是变量名。
#includestdio.h
void main()
{
char str[80];
char c;
int i,j,m,n;
int d=0,x=0,k=0,q=0,s=0;
printf("输入要输入的字符串的个数:\n");
scanf("%d",m);
c=getchar();
for(i=0;i=m-1;i++)
{
printf("输入第%d个字符串:\n",i+1);
for(j=0;(str[j]=getchar())!='\n';j++)
;
n=j;
for(j=0;j=n-1;j++)
{
if(str[j]==' ')
k++;
else if(str[j]='a'str[j]='z')
x++;
else if(str[j]='A'str[j]='Z')
d++;
else if(str[j]='0'str[j]='9')
s++;
else
q++;
}
printf("大写字母数:%d\n",d);
printf("小写字母数:%d\n",x);
printf("数字字符数:%d\n",s);
printf("空格字符数:%d\n",k);
printf("其他字符数:%d\n",q);
}
}
有疑问提出。
库函数并不是C语言的一部分,它是由编译程序根据一般用户的需要编制并提供用户使用的一组程序。每一种C编译系统都提供了一批库函数,不同的编译系统所提供的库函数的数目和函数名以及函数功能是不完全相同的。ANSIC标准提出了一批建议提供的标准库函数。它包括了目前多数C编译系统所提供的库函数,但也有一些是某些C编译系统未曾实现的。考虑到通用性,本书列出Turbo C 2.0版提供的部分常用库函数。
由于Turbo C库函数的种类和数目很多(例如:还有屏幕和图形函数、时间日期函数、与本系统有关的函数等,每一类函数又包括各种功能的函数),限于篇幅,本附录不能全部介绍,只从教学需要的角度列出最基本的。读者在编制c程序时可能要用到更多的函数,请查阅有关的Turbo C库函数手册。
(1)数学函数
使用数学函数时,应该在源文件中使用命令:
#include″math.h″
函数名 函数与形参类型 功 能 返回值
acos double acos(x)
double x 计算cos-1(x)的值
-1=x=1 计算结果
asin double asin(x)
double x 计算sin-1(x)的值
-1=x=1 计算结果
atan double atan(x)
double x 计算tan-1(x)的值 计算结果
atan2 double atan2(x,y)
double x,y 计算tan-1(x/y)的值 计算结果
cos double cos(x)
double x 计算cos(x)的值
x的单位为弧度 计算结果
cosh double cosh(x)
double x 计算x的双曲余弦cosh(x)的值 计算结果
exp double exp(x)
double x 求ex的值 计算结果
fabs double fabs(x)
double x 求x的绝对值 计算结果
floor double floor(x)
double x 求出不大于x的最大整数 该整数的双精度实数
fmod double fmod(x,y)
double x,y 求整除x/y的余数 返回余数的双精度实数
frexp double frexp(val,eptr)
double val
int *eptr 把双精度数val分解成数字部分(尾数)和以2为底的指数,即val=x*2n,n存放在eptr指向的变量中 数字部分x
0.5=x1
log double log(x)
double x 求logex即lnx 计算结果
log10 double log10(x)
double x 求log10x 计算结果
modf double modf(val,iptr)
double val
int *iptr 把双精度数val分解成数字部分和小数部分,把整数部分存放在ptr指向的变量中 val的小数部分
pow double pow(x,y)
double x,y 求xy的值 计算结果
sin double sin(x)
double x 求sin(x)的值
x的单位为弧度 计算结果
sinh double sinh(x)
double x 计算x的双曲正弦函数sinh(x)的值 计算结果
sqrt double sqrt (x)
double x 计算√x,x≧0 计算结果
tan double tan(x)
double x 计算tan(x)的值
x的单位为弧度 计算结果
tanh double tanh(x)
double x 计算x的双曲正切函数tanh(x)的值 计算结果
------------------------------------------------------------------------------------------------------------------------------
(2)字符函数
在使用字符函数时,因该在源文件中使用命令:
#include“ctype.h”
函数名 函数和形参类型 功能 返回值
isalnum int isalnum(ch)
int ch 检查ch是否字母或数字 是字母或数字返回1;否则返回0
isalpha int isalpha(ch)
int ch 检查ch是否字母 是字母返回1;否则返回0
iscntrl int iscntrl(ch)
int ch 检查ch是否控制字符(其ASCⅡ码在0和0xlF之间) 是控制字符返回1;否则返回0
isdigit int isdigit(ch)
int ch 检查ch是否数字 是数字返回1;否则返回0
isgraph int isgraph(ch)
int ch 检查ch是否是可打印字符(其ASCⅡ码在0x21和0x7e之间),不包括空格 是可打印字符返回1;否则返回0
islower int islower(ch)
int ch 检查ch是否是小写字母
(a~z) 是小字母返回1;否则返回0
isprint int isprint(ch)
int ch 检查ch是否是可打印字符(其ASCⅡ码在0x21和0x7e之间),不包括空格 是可打印字符返回1;否则返回0
ispunct int ispunct(ch)
int ch 检查ch是否是标点字符(不包括空格)即除字母、数字和空格以外的所有可打印字符 是标点返回1;否则返回0
isspace int isspace(ch)
int ch 检查ch是否空格、跳格符(制表符)或换行符 是,返回1;否则返回0
issupper int isalsupper(ch)
int ch 检查ch是否大写字母
(A~Z) 是大写字母返回1;否则返回0
isxdigit int isxdigit(ch)
int ch 检查ch是否一个16进制数字
(即0~9,或A到F,a~f) 是,返回1;否则返回0
tolower int tolower(ch)
int ch 将ch字符转换为小写字母 返回ch对应的小写字母
toupper int toupper(ch)
int ch 将ch字符转换为大写字母 返回ch对应的大写字母
-----------------------------------------------------------------------------------------------------------------------
(3)字符串函数
使用字符串中函数时,应该在源文件中使用命令:
#include“string.h”
函数名 函数和形参类型 功能 返回值
memchr void memchr(buf,ch,count)
void *buf;charch;
unsigned int count; 在buf的前count个字符里搜索字符ch首次出现的位置 返回指向buf中ch的第一次出现的位置指针;若没有找到ch,返回NULL
memcmp int memcmp(buf1,buf2,count)
void *buf1,*buf2;
unsigned int count; 按字典顺序比较由buf1和buf2指向的数组的前count个字符 buf1buf2,为负数
buf1=buf2,返回0
buf1buf2,为正数
memcpy void *memcpy(to,from,count)
void *to,*from;
unsigned int count; 将from指向的数组中的前count个字符拷贝到to指向的数组中。From和to指向的数组不允许重叠 返回指向to的指针
memove void *memove(to,from,count)
void *to,*from;
unsigned int count; 将from指向的数组中的前count个字符拷贝到to指向的数组中。From和to指向的数组不允许重叠 返回指向to的指针
memset void *memset(buf,ch,count)
void *buf;char ch;
unsigned int count; 将字符ch拷贝到buf指向的数组前count个字符中。 返回buf
strcat char *strcat(str1,str2)
char *str1,*str2; 把字符str2接到str1后面,取消原来str1最后面的串结束符`\0` 返回str1
strchr char *strchr(str1,ch)
char *str;
int ch; 找出str指向的字符串中第一次出现字符ch的位置 返回指向该位置的指针,如找不到,则应返回NULL
strcmp int *strcmp(str1,str2)
char *str1,*str2; 比较字符串str1和str2 str1str2,为负数
str1=str2,返回0
str1str2,为正数
strcpy char *strcpy(str1,str2)
char *str1,*str2; 把str2指向的字符串拷贝到str1中去 返回str1
strlen unsigned intstrlen(str)
char *str; 统计字符串str中字符的个数(不包括终止符`\0`) 返回字符个数
strncat char *strncat(str1,str2,count)
char *str1,*str2;
unsigned int count; 把字符串str2指向的字符串中最多count个字符连到串str1后面,并以null结尾 返回str1
strncmp int strncmp(str1,str2,count)
char *str1,*str2;
unsigned int count; 比较字符串str1和str2中至多前count个字符 str1str2,为负数
str1=str2,返回0
str1str2,为正数
strncpy char *strncpy(str1,str2,count)
char *str1,*str2;
unsigned int count; 把str2指向的字符串中最多前count个字符拷贝到串str1中去 返回str1
strnset void *setnset(buf,ch,count)
char *buf;char ch;
unsigned int count; 将字符ch拷贝到buf指向的数组前count个字符中。 返回buf
strset void *setnset(buf,ch)
void *buf;char ch; 将buf所指向的字符串中的全部字符都变为字符ch 返回buf
strstr char *strstr(str1,str2)
char *str1,*str2; 寻找str2指向的字符串在str1指向的字符串中首次出现的位置 返回str2指向的字符串首次出向的地址。否则返回NULL
-----------------------------------------------------------------------------------------------------------------------------
(4)输入输出函数
在使用输入输出函数时,应该在源文件中使用命令:
#include“stdio.h”
函数名 函数和形参类型 功能 返回值
clearerr void clearer(fp)
FILE *fp 清除文件指针错误指示器 无
close int close(fp)
int fp 关闭文件(非ANSI标准) 关闭成功返回0,不成功返回-1
creat int creat(filename,mode)
char *filename;
int mode 以mode所指定的方式建立文件。(非ANSI标准) 成功返回正数,
否则返回-1
eof int eof(fp)
int fp 判断fp所指的文件是否结束 文件结束返回1,
否则返回0
fclose int fclose(fp)
FILE *fp 关闭fp所指的文件,释放文件缓冲区 关闭成功返回0,不成功返回非0
feof int feof(fp)
FILE *fp 检查文件是否结束 文件结束返回非0,否则返回0
ferror int ferror(fp)
FILE *fp 测试fp所指的文件是否有错误 无错返回0;
否则返回非0
fflush int fflush(fp)
FILE *fp 将fp所指的文件的全部控制信息和数据存盘 存盘正确返回0;
否则返回非0
fgets char *fgets(buf,n,fp) char *buf;int n;
FILE *fp 从fp所指的文件读取一个长度为(n-1)的字符串,存入起始地址为buf的空间 返回地址buf;若遇文件结束或出错则返回EOF
fgetc int fgetc(fp)
FILE *fp 从fp所指的文件中取得下一个字符 返回所得到的字符;出错返回EOF
fopen FILE *fopen(filename,mode)
char *filename,*mode 以mode指定的方式打开名为filename的文件 成功,则返回一个文件指针;否则返回0
fprintf int fprintf(fp,format,args,…)
FILE *fp;char *format 把args的值以format指定的格式输出到fp所指的文件中 实际输出的字符数
fputc int fputc(ch,fp)
char ch;FILE *fp 将字符ch输出到fp所指的文件中 成功则返回该字符;出错返回EOF
fputs int fputs(str,fp)
char str;FILE *fp 将str指定的字符串输出到fp所指的文件中 成功则返回0;出错返回EOF
fread int fread(pt,size,n,fp) char *pt;unsigned size,n;FILE *fp 从fp所指定文件中读取长度为size的n个数据项,存到pt所指向的内存区 返回所读的数据项个数,若文件结束或出错返回0
fscanf int fscanf(fp,format,args,…)
FILE *fp;char *format 从fp指定的文件中按给定的format格式将读入的数据送到args所指向的内存变量中(args是指针) 以输入的数据个数
fseek int fseek(fp,offset,base)
FILE *fp;long offset;int base 将fp指定的文件的位置指针移到base所指出的位置为基准、以offset为位移量的位置 返回当前位置;否则,返回-1
siell FILE *fp;
long ftell(fp); 返回fp所指定的文件中的读写位置 返回文件中的读写位置;否则,返回0
fwrite int fwrite(ptr,size,n,fp) char *ptr;unsigned size,n;FILE *fp 把ptr所指向的n*size个字节输出到fp所指向的文件中 写到fp文件中的数据项的个数
getc int getc(fp)
FILE *fp; 从fp所指向的文件中的读出下一个字符 返回读出的字符;若文件出错或结束返回EOF
getchar int getchat() 从标准输入设备中读取下一个字符 返回字符;若文件出错或结束返回-1
gets char *gets(str)
char *str 从标准输入设备中读取字符串存入str指向的数组 成功返回str,否则返回NULL
open int open(filename,mode) char *filename;
int mode 以mode指定的方式打开已存在的名为filename的文件
(非ANSI标准) 返回文件号(正数);如打开失败返回-1
printf int printf(format,args,
…)
char *format 在format指定的字符串的控制下,将输出列表args的指输出到标准设备 输出字符的个数;若出错返回负数
prtc int prtc(ch,fp)
int ch;FILE *fp; 把一个字符ch输出到fp所值的文件中 输出字符ch;若出错返回EOF
putchar int putchar(ch)
char ch; 把字符ch输出到fp标准输出设备 返回换行符;若失败返回EOF
puts int puts(str)
char *str; 把str指向的字符串输出到标准输出设备;将`\0`转换为回车行 返回换行符;若失败返回EOF
putw int putw(w,fp)
int i;
FILE *fp; 将一个整数i(即一个字)写到fp所指的文件中
(非ANSI标准) 返回读出的字符;若文件出错或结束返回EOF
read int read(fd,buf,count) int fd;char *buf;
unsigned int count; 从文件号fp所指定文件中读count个字节到由buf知识的缓冲区(非ANSI标准) 返回真正读出的字节个数,如文件结束返回0,出错返回-1
remove int remove(fname)
char *fname; 删除以fname为文件名的文件 成功返回0;出错返回-1
rename int remove(oname,nname)
char *oname,*nname; 把oname所指的文件名改为由nname所指的文件名 成功返回0;出错返回-1
rewind void rewind(fp)
FILE *fp; 将fp指定的文件指针置于文件头,并清除文件结束标志和错误标志 无
scanf int scanf(format,args,
…)
char *format 从标准输入设备按format指示的格式字符串规定的格式,输入数据给args所指示的单元。args为指针 读入并赋给args数据个数。如文件结束返回EOF;若出错返回0
write int write(fd,buf,count) int fd;char *buf;
unsigned count; 丛buf指示的缓冲区输出count个字符到fd所指的文件中(非ANSI标准) 返回实际写入的字节数,如出错返回-1
------------------------------------------------------------------------------------------------------------------------------
(5)动态存储分配函数
在使用动态存储分配函数时,应该在源文件中使用命令:
#include“stdlib.h”
函数名 函数和形参类型 功能 返回值
callloc void *calloc(n,size)
unsigned n;
unsigned size; 分配n个数据项的内存连续空间,每个数据项的大小为size 分配内存单元的起始地址。如不成功,返回0
free void free(p)
void *p; 释放p所指内存区 无
malloc void *malloc(size)
unsigned SIZE; 分配size字节的内存区 所分配的内存区地址,如内存不够,返回0
realloc void *reallod(p,size)
void *p;
unsigned size; 将p所指的以分配的内存区的大小改为size。Size可以比原来分配的空间大或小 返回指向该内存区的指针。若重新分配失败,返回NULL
-------------------------------------------------------------------------------------------------------------------------------
(6)其他函数
“其他函数”是C语言的标准库函数,由于不便归入某一类,所以单独列出。使用这写函数时,应该在源文件中使用命令:
#include“stdlib.h”
函数名 函数和形参类型 功能 返回值
abs int abs(num)
int num 计算整数num的绝对值 返回计算结果
atof double atof(str)
char *str 将str指向的字符串转换为一个double型的值 返回双精度计算结果
atoi int atoi(str)
char *str 将str指向的字符串转换为一个int型的值 返回转换结果
atol long atol(str)
char *str 将str指向的字符串转换为一个long型的值 返回转换结果
exit void exit(status)
int status; 中止程序运行。将status的值返回调用的过程 无
itoa char *itoa(n,str,radix)
int n,radix;
char *str 将整数n的值按照radix进制转换为等价的字符串,并将结果存入str指向的字符串中 返回一个指向str的指针
labs long labs(num)
long num 计算c整数num的绝对值 返回计算结果
ltoa char *ltoa(n,str,radix)
long int n;int radix;
char *str; 将长整数n的值按照radix进制转换为等价的字符串,并将结果存入str指向的字符串 返回一个指向str的指针
rand int rand() 产生0到RAND_MAX之间的伪随机数。RAND_MAX在头文件中定义 返回一个伪随机(整)数
random int random(num)
int num; 产生0到num之间的随机数。 返回一个随机(整)数
rand_omize void randomize() 初始化随机函数,使用是包括头文件time.h。
strtod double strtod(start,end)
char *start;
char **end 将start指向的数字字符串转换成double,直到出现不能转换为浮点的字符为止,剩余的字符串符给指针end
*HUGE_VAL是turboC在头文件math.H中定义的数学函数溢出标志值 返回转换结果。若为转换则返回0。若转换出错返回HUGE_VAL表示上溢,或返回-HUGE_VAL表示下溢
strtol Long int strtol(start,end,radix)
char *start;
char **end;
int radix; 将start指向的数字字符串转换成long,直到出现不能转换为长整形数的字符为止,剩余的字符串符给指针end。
转换时,数字的进制由radix
确定。
*LONG_MAX是turboC在头文件limits.h中定义的long型可表示的最大值 返回转换结果。若为转换则返回0。若转换出错返回LONG_MAX表示上溢,或返回-LONG_MAX表示下溢
system int system(str)
char *str; 将str指向的字符串作为命令传递给DOS的命令处理器 返回所执行命令的退出状态
for(int i=1;i
追问:
考虑了啊,如果前一个字母是空格,则后一个字母转为大写。。
追答:
你的意思是你输入时保证以空格开头?我在测试你的代码,稍候
supper()函数中
if(c'a' c'z') //这里应该加上=,不然会少两个字母a z , 改成:
if(c='a' c='z')
以下是调整后的完整代码,请验收,调整部分看注释
#include
#include
char Super(char c);
int main()
{
char a[100];
int len;
printf("input :");
gets(a);
len=strlen(a);
a[0]=Super(a[0]); //加一句,保证首字母的大写
for(int i=1;i
='a' c='z') //-------
{
return c-32;
}else
{
return c;
}
}
追问:
这个可以不加结束符吧,因为本来就有个结束符,不过谢谢你的解答,答案是对的,除了有点小瑕疵,因为首先要在前面定义int
i;
追答:
嗯,结束符确实是画蛇添足了
评论
加载更多