C语言字符串
作者:互联网
一、表示字符串和字符串I/O
字符串是以空字符(\0)结尾的插入类型数组。
字符串常量属于静态储存类别。
字符串储存在静态储存区。
1、字符串数组
char *str[4];
二、字符串输入
输入字符串首先要分配空间。输入的长度应该是字符串的的长度(一些较老的版本,是输入的长度应该是字符串的的长度+1,‘+1’是给字符串结束符空字符(\0)预留的)。
1、gets()函数(和puts())
gets()读取郑航输入,知道遇到换行符,然后丢弃换行符,储存其余字符,并在这些字符的结尾添加一个空字符十七成为一个C字符串。经常和puts()配合使用。
gets函数只知道数组的开始处,并不知道数组中有多少个元素,如果输入的字符串过长,会导致缓冲区溢出,及多余的字符超出了指定的目标空间。
下面是正常的gets()
#include <stdio.h>
int main()
{
char ch[100 + 1];
puts("Enter a string, please:");
gets(ch);
printf("%s\n", ch);
printf("------------------\n");
puts(ch);
return 0;
}
下面是正常的gets()输入的字符串长度大于定义的字符串长度
#include <stdio.h>
int main()
{
char ch[3 + 1];
puts("Enter a string, please:");
gets(ch);
printf("%s\n", ch);
printf("------------------\n");
puts(ch);
return 0;
}
2、fgets()函数(和fputs())
fgets()函数通过第二个参数限制读入的字符数解决溢出的问题。
1、fgets()函数的第二个参数指明了读入字符的最大数量。如果该参数是n,那么fgets()读取的就是n-1个字符,或者读到遇到的一个换行符为止。
2、如果fgets()读到一个换行符,会把他储存在字符串中。这点与gets()不通,gets()会丢弃掉换行符。
3、fgets()函数的第三个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin(标准输入)作为参数,改标识符定义在stdio.h中。
fgets()函数通常和fputs()搭配使用。fgets()函数的第二个参数要指明它写入的文件。如果现实在计算器显示器上,应使用stdout(标准输出)作为该参数。
fgets()返回的是字符指针,内容是输入的内容。
#include <stdio.h>
#define SIZELEN 8
int main()
{
char ch[SIZELEN];
puts("Enter a string, please.");
fgets(ch, SIZELEN, stdin);
printf("printf:----------------------\n");
printf("%s", ch);
printf("fputs:----------------------\n");
fputs(ch, stdout);
printf("put:----------------------\n");
puts(ch);
printf("----------------------\n");
return 0;
}
3、gets_s()函数
get_s(ch, length);
1、get_s()只从标准输入中读取数据,所以不需要第三个参数。
2、如果gets_s读到换行符,会丢弃它而不是储存它。
3、如果gets_s()读到最大字符都没有读取到换行符,会执行以下几步。首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直至换行符或文件结尾,然后返回空指针。接着,调用依赖实现的“处理函数”(或你选择的其他函数),可能会终止或退出程序。
标签:ch,puts,C语言,fgets,printf,字符串,gets 来源: https://blog.csdn.net/qq_43085982/article/details/122271531