gets
参数是个字符数组char * gets(char *s);
使用gets和scanf都要注意缓冲区溢出问题
返回值
- 成功: 读取的字符串
失败: NULL
int main(int argc, char const *argv[]) { char a[100]={ 0 }; gets(a); printf("%s\n", a); return 0; }运行会有个警告,先不用管
scanf认为回车和空格都代表输入完成,不允许含有空格
-
fgets
char *fgets(char *s, int size, FILE *stream); 从stream指定的文件内读入字符,保存到指定的内存空间,直到出现换行字符,读到文件结尾或是已经读了size-1个字符为止,最后自动加上字符
'\0'作为字符串结束- fgets有三个参数,第一个参数是char的数组,第二个参数是标明这个数组的大小,第三个参数如果是通过键盘输入可以固定写为stdin
- 结果: 如果输入的大小小于原始指针对应区域的大小,会在字符串输入完成时自动加上
\n\0.如果输入的大小小于等于原始指针对应的区域大小,会自动加上\0,而不会在加上\n
gets函数不检查预留缓冲区是否能够容纳用户实际输入的数据.多出来的字符会导致内存溢出,fgets解决了这个问题
由于fgets函数是为读取文件设计的,所以读取键盘输入的时候没有gets方便
int main(int argc, char const *argv[])
{
char a[10]={ 0 };
fgets(a,sizeof(a),stdin);
printf("%s", a);
return 0;
}
puts
#include <stdio.h>
int puts(const char *s);
返回值
- 成功: 非负数
- 失败: -1
puts函数打印字符串,与printf不同,puts会在最后自动添加一个’\n’,puts不支持各种转义字符,比如%d,%s都不支持,puts只能简单的直接输出一个字符串,而不能输出char,int,double等其他类型
char s[]="hello world";
puts(s);
fputs
int fputs(const char * str, FILE * stream);
fputs是puts的文件操作版本
第一个参数是一个char的数组,第二个参数如果只是用puts在屏幕输出的话可以固定写为stdout
返回值
- 成功: 0
失败: -1
char s[]="hello world"; fputs(s,stdout);strlen
字符串长度
这个库函数需要包含头文件size_t strlen(const char * _Str);返回不包含字符串结尾’\0’的字符串长度
建议不要处理字符数组,除非含有’\0’
我们自己算长度char a[100]="hello"; unsigned int len=0; while(a[len]) { len++; } printf("%u\n", len);#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char a[100]="hello world"; unsigned int len=0; len=strlen(a); printf("%u\n", len); return 0; }strcat
字符串追加
size_t strcat(char * _Str1, const char * _Str2);将参数_Str2追加到_Str1后尾,’\0’也会追加过去
返回成功: 返回dest字符串的首地址
失败: NULL
char a[100]="abc"; char b[100]="123"; //把a和b合并为一个字符串,结果放入a strcat(a,b); printf("%s\n", a);stncat,字符串有限追加
size_t strncat(char * _Str1,const char * _Str2,size_t len);在strcat基础上增加了一个参数,这个参数来标明最多可以追加几个char
strcmp 字符串比较
int strcmp(const char * _Str1, const char * _Str2);比较的是字符ASCII码大小
返回
相等返回0,
大于:>0,
小于:<0strncmp 字符串有限比较
指定比较2个字符串的前几个字符
int strncmp(const char * _Str1, const char * _Str2,size_t n);strcpy 字符串拷贝
char *strcpy(char *_Str1, comst char *_Str2);将参数_Str2拷贝到参数_Str1中,’\0’也会拷贝过去
Strcpy也存在内存溢出的问题
返回成功: 返回dest字符串的首地址
- 失败: NULL
strncpy 字符串有限拷贝
n代表有限拷贝,一般n为char *strncpy(char *_Str1, comst char *_Str2,size n);size(char *_Str1)-1sprintf 格式化字符串
和printf函数功能类似,printf函数将格式化结果输出到屏幕,sprintf将格式化结果输出到字符串
sprint使用方法和printf类似,唯一区别是增加了第一个参数,第一个参数是一个char数组#include <stdio.h> int sprintf(char *str, const char *format, ...); 功能: 根据参数format字符串来转换并格式化数据,然后将结果输出到str指定的空间中,直到出现字符串结束符'\0'为止 参数: str:字符串首地址 format:字符串格式,用法和printf()一样 返回值: 成功: 实际格式化的字符个数 失败: -1char a[100]; sprintf(a,"%s","hello world"); printf("%s\n", a);sscanf函数
sscanf类似scanf函数,scanf从键盘读取用户输入,scanf从指定格式化字符串读取输入
sscanf多了第一个参数,char数组,sscanf会从这个char数组中读取相关内容#include <stdio.h> int sscanf(const char *str, const char *format, ...); 功能: 从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据 参数: str: 指定的字符串首地址 format: 字符串格式,用法和scanf()一样 返回值: 成功: 实际读取的字符个数 失败: -1
strchr 查找字符
char * strchr(char * _Str,int _Ch);
在参数_str中查找_Ch指定字符,找到返回字符_Ch在_Str中所在位置,没有找到返回NULL;
int main()
{
char src[] = "dda123sdf";
char *p = strchr(src, 'a'); //如果是汉子用""
printf("p=%s\n", p); //a123sdf
if (p != NULL)
{
printf("找到了\n");
}
system("pause");
return EXIT_SUCCESS;
}
strstr查找字符串
int main()
{
char src[] = "dda123sdf";
char *p = strstr(src, "a123");
printf("p=%s\n", p); //a123sdf
system("pause");
return EXIT_SUCCESS;
}
strtok 字符串分割
#include<string.h>
char *strtok(char *str, const char *delim);
功能: 将字符串分割成一个个片段,当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为’\0’字符,当连续出现多个时只替换第一个为’\0’
int main()
{
char src[] = "dda123sdf";
char *p = strtok(src, "a123");
printf("p=%s\n", p); //dd
system("pause");
return EXIT_SUCCESS;
}
scanf
int main()
{
char arr[100];
int a, b, c;
//1. 接收换行结束,可以接收空格
//scanf("%[^\n]", &arr);
//printf("%s\n", arr);
//2. 在scanf获取数据时,建议不要添加任何字符,空格除外
//scanf("a=%db=%dc=%d", &a, &b, &c); //输入a=1b=2c=3
//printf("%d %d %d\n", a, b, c);
//3. 有限定字符宽度的格式化
//scanf("%1d%2d%3d", &a, &b, &c);
//printf("%.2f\n", 3.1415);
//printf("%d %d %d\n", a, b, c);
//补空格
//printf("%4s\n", "ab");
//截取
//printf("%.4s\n", "ab");
//4. 屏蔽数据类型, %d屏蔽数字, %c屏蔽字符
//scanf("%*d%s", arr);
//printf("%s\n", arr);
//5. 屏蔽一个区间之内的
//scanf("%*[a-z]%c", arr);
//printf("%s\n", arr);
system("pause");
return EXIT_SUCCESS;
}
aoti
头文件:#include <stdlib.h>
atoi() 函数用来将字符串转换成整数(int),其原型为:
int atoi (const char * str);
atoi() 函数会扫描参数 str 字符串,
跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),
直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。
返回转换后的整型数;如果 str 不能转换成 int 或者 str 为空字符串,那么将返回 0
将字符串a 与字符串b 转换成数字后相加
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i;
char buffer[256];
printf ("Enter a number: ");
fgets (buffer, 256, stdin);
i = atoi (buffer);
printf ("The value entered is %d.", i);
system("pause");
return 0;
}
输出
Enter a number: 233cyuyan
The value entered is 233.
