如果想把一个字符串读入程序,首先必须预留储存该字符串的空间,然后用输入函数获取该字符串。

分配空间

1.char *name;

2.char name[81];

 

1,2 的不同点:1.的指针在未进行初始化之前可能指向任何地方。

                        2.已分配了81个字节的地址。

  char *name;

  scanf("%s",name); // 错误 会将输入的字符串拷贝到任何地方可能会擦写掉程序中的数据或代码。

为字符串分配内存后便可读入字符串。

利用输入函数获取字符串

  1.scanf()函数。

弊端:只能读取一个单词。

原理:如果输入了空格会认为字符串结束,将空格的字符作为下一个输入处理。

例如:scanf("%s",name); 输入:aas df 会将aas放入地址中再在后面自动添加'\0',并将df作为下一个输入处理。

#include <stdio.h>
int main()
{
char ch1[10],ch2[10];

  scanf("%s",ch1);
  scanf("%s",ch2);
  printf("%s,%s",ch1,ch2);
return 0;
}

2.gets()函数。

弊端:该函数只知道数组的开始处,并不知道数组的大小,如果输入的字符串过长容易溢出,可能擦写掉程序中的其他数据导致程序异常终止。

原理:读取整行的输入直至遇到换行符,然后丢弃换行符,储存其余字符,并在这些字符末尾添加一个空字符使其成为一个字符串。

#include <stdio.h>
int main()
{
char ch1[10],ch2[10];

  gets(ch1);
  scanf("%s",ch2);
  printf("%s,%s",ch1,ch2);
return 0;
}

3.fgets()函数。

  gets()的参数只有数组的地址,而fgets()函数的参数有三个。

  fgets(将要输入字符串的地址,读入字符的最大数量,要读入的文件) 

通过第二个参数来限制读入字符的数量解决gets()的溢出的问题。

终止条件:①读入n-1个字符②遇到第一个换行符

原理:①终止在末尾添加一个空字符。

           ②终止保留换行符再在末尾添加一个空字符。 

返回值:当读到文件末尾时返回空指针。  

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐