一、创建存储空间
声明字符串的时候如果没有对字符串进行初始化,那么就必须在声明的时候明确指出数组的大小
char name [80];
表示一个name可以存80个字符的字符串(字符数组)
若char * name [80];
则表示name是指针数组,可以有80个指向char的指针
二、读取字符串的函数:scant (),gets (),fgets ()
1、gets ()函数
a> 从系统的标准输入设备(键盘)获得一个字符串,读字符串直到遇到第一个换行符(\n)代表字符串结束。把\n之前(不包括\n)的字符再在最后位置加一个空字符(\0)交给调用它的程序,因为gets()也读取了\n且舍去了,所以下一次读取会在新的一行。
b> gets ()函数返回的是读入字符串的地址(指针),出错或如果遇到文件结尾,它就返回一个空地址(不是空字符)或0,这个空地址就是空指针,并用NULL表示。
例:
char name [80];
char * ptr;
ptr = gets (name); //gets()返回一个指向char的指针,指针赋值给ptr。
printf (“%s? Ah! %s!\n”, name, ptr); //都会输出 输入的名字
2、fgets ()函数
fgets ()函数让您指定最大读入字符数,防止了因为实际输入的数据超出预留的存储空间,而溢出到相邻的内存区。
格式:fgets (name, n, stdin);
第二个参数指定最大读入字符数为n - 1个或者读完一个换行符\n为止,哪个先满足按哪个来结束输入。
fgets ()如果读取到换行符\n,不会丢弃它,会把\n存在字符串中。
第三个参数来说明读哪个文件,stdin代表从键盘读取输入。
对于重要的编程,应该使用fgets ()函数,这样更安全。
3、scanf ()函数
和gets ()主要的差别:如何决定字符串何时结束。
scanf ()函数获取字符串:
从第一个非空白字符开始读取,直到读取到(但不包括)下一个空白字符结束,更像是获取单词,回车产生的\n会被舍弃;
指定字段宽度,比如%5s,scanf ()就会读入5个字符或直到遇到第一个空白字符,由两个条件最先达到的那个来终止读入。
如果第一次读取没有读完,那么下一次的读取将从上一次调用结束的地方开始读取数据。
例: #include <stdio.h>
int main(void)
{
char name1[11], name2[11];
int count;
printf("Please enter 2 names.\n");
count = scanf("%5s %10s",name1, name2);
printf("I read the %d names %s and %s.\n",
count, name1,name2);
return 0;
}
输入:Portensia Callowit
输出:I read the 2 names Porte and nsia.
scanf ()函数的返回值:1、成功读取的个数;2、遇到文件结束时返回一个EOF |
|