11.2字符串输入
11.2字符串输入
如果想把一个字符串读入程序,首先必须预留储存该字符串的空间,然后用输入函数获取该字符串
11.2.1分配空间
程序不会在读取字符串时计算它的长度再分配空间,所以要先分配足够的空间
char *name
scanf("%s",name)
scanf要把信息拷贝至参数指定的地方,但是此时该参数是个未初始化的指针,name可能会指向任何地方
解决办法是在声明时指明数组的大小
char name[81]
现在name是一个已经分配块(81字节)的地址
11.2.2gets函数
在读取字符串时,scanf和转换说明%s只能读取一个单词,可是在程序中经常要读取一整行输入
gets函数就用于处理这种情况,能读取整行输入,知道遇到换行符,然后丢弃换行符,读取其他字符,并且在这些字符的末尾添加一个空字符使其称为一个c字符串
#include <stdio.h>
#define STLEN 81int main(void)//声明定义数组空间
{
char words[STLEN]; //创建数组
puts("Enter a string, please.");
gets(words); // 典型用法
printf("Your string twice:\n");
printf("%s\n", words);
puts(words);
puts("Done.");
return 0;
}
11.2.3gets的替代品
1.fgets函数
fgets函数通过2个参数限制读入的字符来解决溢出的问题
fgets函数的第二个参数指明了读入字符的最大数量
如果fgets读到一个换行符,那会储存在字符串中
fgets的第三个参数指明要读入的文件,读入从键盘输入的数据,则以stdin作为参数
2.gets_s
gets_s只从标准输入中读取数据,所以不需要第三个参数
读到换行符,会丢弃它而不是储存它
11.2.4scanf函数
scanf和gets或fgets的区别是他们如何确定字符串的末尾
作业
#define a 10
void getnchar(char b[], int n);//创建储存函数和储存的数组
int main(int argc, char* argv[])
{
char input[a];
printf("Please enter %d characters:\n", a - 1);//主要函数执行打印输入输出
getnchar(input, a);
printf("Result:\n");
puts(input);
printf("Done.\n");
return 0;
}
void getnchar(char b[], int n)
{
int i = 0;
while (i < n - 1)
{
b[i++] = getchar();//依次储存
}
b[i] = '\0';
return;
}
#define a 10
void getnchar(char b[], int n);
int main(int argc, char* argv[])
{
char input[a];
printf("Please enter %d characters:\n", a - 1);
getnchar(input, a);
printf("Result:\n");
puts(input);
printf("Done.\n");
return 0;
}
void getnchar(char b[], int n)
{
int i = -1;
while (++i < n - 1)
{
b[i] = getchar();
if (isspace(b[i]))
{
break;
}
}
b[i] = '\0';
return;
}
本文作者:New灬撕裂の天堂
本文链接:https://www.cnblogs.com/newbroken/p/15871832.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
本文作者:New灬撕裂の天堂
本文链接:https://www.cnblogs.com/newbroken/p/15871832.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步