**
C语言 字符串 学习笔记
零,创建存储空间
**首先,c语言中字符串都是用字符数组的形式来存储,并且在使用操作过程中不以数组形式出现(常常是数组名作为首地址单枪匹马)
创建固态存储空间:
char zifu[MAX]; //创建完成
创建动态存储空间:(不建议)
char *zifu;
scanf("%s", zifu);
弊端:zifu是内存空间中随机找的一个地方,进行字符串赋值操作会覆盖此处数据和代码,并可能导致程序异常终止。
但是如果不进行任何更改操作,那么这样创建一个动态数组完全可以。
一,输入
1.scanf():适合输入单词类型
针对输入串的空格:串前空格跳过,串中空白字符(换行符,空格符,制表符)为自动结束 [且不读取该空白字符](字符串的最后有“/0”)
关于读取格式:scanf("%s/%10s",zifu);
ps:%10s为指定了字段宽度,表示读取10个字符。另外,没有赋值符号!
关于scanf()函数:scanf()的返回值是已经成功赋值的变量个数(0/1/2…)或者如果遇到错误或遇到end of file,返回值为EOF.
分隔符问题:主要是针对“%c”:默认没有任何分隔字符(包括all空白字符)***解决方法:***(1) 清空缓冲区——有一个名为fflush(stdin)的函数,可以用来清空缓冲区。
while(scanf("%c%c",&a,&b)!=EOF)
{
printf("a=%c,b=%c\n",a,b);
fflush(stdin);
printf("Input the value of a and b:");
}
即:在空白字符被误读之前将缓冲区暂时清空。
(2)将缓冲区的致错数据读出来(间接清理缓冲区)——getchar() or gets()
对于getchar():读取缓冲区的第一个字符(EOF),该函数的返回值为该字符(EOF==-1)(若返回给整型变量则是它对应的ASCII码)扩展兄弟函数putchar():putchar(ch/int)——此函数输出在终端以参数ch/int(ASCII码)对应的char值
2.gets{get string}():读取一行东西
判断遇到的第一个换行符(\n)结束输入,并且用一个空字符(\0)替换该换行符。
gets()的缺陷:不会检查数组能否放得下输入行所以经常会出现warning报错
该函数的使用:gets(name):将读取的一行字符串赋值到name数组中。该函数return字符串的首地址。(str=gets(name)——str也指向name字符串数组)
char name[MAX];
char *ptr; //指向char的指针
printf("Please input your name.\n");
ptr = gets(name); //使用一个地址吧字符串赋值给name
//gets()函数使用return关键字返回字符串的地址
printf("name, %s\n", name);
printf("ptr, %s\n", ptr);
如何结束行字符串的反复读取:如果在gets()函数在读取字符串时出错或者遇到文件结尾(EOF),它就返回一个空(或0)地址,这个空地址被称为空指针,并且stdio.h里面定义的常量NULL来表示,可以用下面的代码来进行一些错误检测。
while(get(name) != NULL)
3.fgets():读取字符串通过两种方式结束:换行符OR字符数量达上限
比前两个 多一个性能,不仅是读取标准输入方式(键盘)
fgets(name, MAX, stdin);
PS:fgets()也会像gets()一样在读取的字符串末尾加上一个空字符
第三个参数来说明读哪一个文件!从键盘上读取数据时,可以使用stdin(代表standard input)作为参数,这个标识符在stdio.h中定义。
转载:https://blog.csdn.net/weixin_45076393/article/details/104462333