1.gets函数
gets(char *s);//参数是一个字符数组
使用gets和scanf(C++中不建议使用scanf就是因为缓冲区警告)都要注意缓冲区溢出的问题
scanf回车和空格都默认输入结束,而gets只认回车//gets在新版本被淘汰了
2.fgets函数
gets函数不检查预留缓冲区是否能够容纳用户实际输入的数据。多出来的字符会导致内存溢出,而fgets函数改进了这个问题。
由于fgets函数是为读取文件设计的,所以读取键盘时没有gets那么方便
Gets有三个参数,第一个参数是char的数组,第二个参数是标明这个数组的大小,第三个参数如果是通过键盘输入可以固定写为stdin
Fgets在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。Fgets函数是安全的,不存在缓冲区溢出的问题。
Fgets(char *s, size_t len, stdin);//stdin是标准输入设备,也可以另填fopen的指针
char s[100] = { 0 };
fgets(s, sizeof(s), stdin);
3.puts函数
puts函数打印字符串,与printf不同,puts会在最后自动添加一个’\n’,puts不支持各种转义字符,比如%d,%s都不支持,puts只能简单的直接输出一个字符串,而不能输出char,int,double等其他类型。
char s[] = "hello world";
puts(s);
4.fputs函数
fputs是puts的文件操作版本,第一个参数是一个char的数组,第二个参数如果只是用puts在屏幕输出的话可以固定写为stdout
Fgets不会自动输出一个\n
char s[] = "hello world";
fputs(s, stdout);
5.strlen 字符串长度
查看字符串有效字符个数
这个库函数需要包含头文件<string.h>
size_t strlen(const char * _Str);
char a[100] = "abcdefg123";
int len = strlen(a);
返回不包含字符串结尾’\0’的字符串长度
6.strcat字符串追加
size_t strcat(char * _Str1, const char * _Str2);
将参数_Str2追加到_Str1后尾
存在缓冲区溢出的危险,如果字符串没有足够的空间追加第二个字符串,那么程序就出错了
7.strncat 字符串有限追加
size_t len = sizeof(a)-sizeof(b);
if(len>0)size_t strncat(char * _Str1, const char * _Str2, size_t len);
8.strcmp 字符串比较
int strcmp(const char * _Str1, const char * _Str2);
比较两个字符串是否相等,相等返回0,不等返回非0
9.strncmp 字符串有限比较
指定比较两个字符串的前几个字符
int strncmp(const char * _Str1, const char * _Str2, size_t n);
n代表指定比较字符串的数量
10strcpy 字符串拷贝
char *strcpy(char * _Str1, const char * _Str2);
将参数_Str2拷贝到参数_Str1中
Strcpy也存在内存溢出的问题
11.strncpy字符串有限拷贝
char *strcpy(char * _Str1, const char * _Str2, size_t n);
n代表有限拷贝。
12.sprintf 格式化字符串
和printf函数功能类似,printf函数将格式化结果输出到屏幕,sprintf将格式化结果输出到字符串
Sprintf使用方法与printf类似,唯一区别是增加了第一个参数,第一个参数是一个char数组
sprintf(str,"%d+%d=%d",a,b,a+b);//第二个参数的内容输入到第一个参数中去
12.1fprintf 按格式输入到文件
比sprintf少了fputs过程
fprintf(FILE *p,"%s",char *n);
fprintf(FILE *p,"%d %d",a1,a2);
用法和printf一样,只是多了第一个参数,参数是打开的文件指针
char a[] = "hello";
fprintf(p,"%s",a);
13Sscanf函数(按格式取)
Sscanf类似于scanf函数,,scanf从键盘读取用户输入,scanf从指定格式化字符串读取输入
Sscanf多了第一个参数,char的数组,sscanf会从这个char的数组中读取相关内容。
char str[] = "32+67";
int a,b;
sscanf(str,"%d+%d",&a,&b);
printf("a = %d,b = %d\n",a,b);
输出a = 32 ,b= 67
13.1fscanf函数(从文件中按格式读取)
文件p本身格式!
4+5
5+6
fscanf(p,"%d+%d",&a1,&a2);
printf("a1 = %d,a2 = %d\n",a1,a2);
fscanf(p,"%d+%d",&a1,&a2);//自动下移
printf("a1 = %d,a2 = %d\n",a1,a2);
输出
a1 = 4,a2 = 5
a1 = 5,a2 = 6
14.strchr查找字符
char * strchr(char * _Str, int _Ch);
在参数_str中查找参数_Ch指定字符,找到返回字符_Ch在_Str中所在位置,没有找到返回NULL;
15.strstr查找字符串
char * strstr(char * _Str, const char * _SubStr)
在参数_str中查找参数_SubStr指定子串,找到返回子串在_Str中所在位置,没有找到返回NULL;
16.strtok分割字符串
字符在第一次调用时strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL每次调用成功则返回指向被分割出片段的指针
char buf[] = "abc@defg@igk";
char *p = strtok(buf, "@");;
while (p)
{
printf("%s\n", p);
p = strtok(NULL, "@");
}
17. atoi转化为int
atoi的功能就是把一个char的数组转化为一个int,需要头文件stdlib.h
char a[] = "123";
char b[] = "34";
int a1;
int b1;
a1 = atoi(a); //atof atol同理 a to int/float/long的意思
b1 = atoi(b);
int c = a1 + b1;
printf("%d\n",c);
18.atof转化为float
把一个小数形式的字符串转化为一个浮点数
19.atol转化为long
将一个字符串转化为long类型
C语言并没有把一个int转化成字符串的函数,所以不要尝试使用itoa这种函数
可以用sprintf将一个int,或者其他类型转化为一个字符串。
Itoa可以在VS编译,但在其他系统下就未知了。