字符串的输入输出及相关函数
7 if(ret_value){
8 while(st[i] != '\n' && st[i] != '\0')
9 i++;
10 if(st[i] == '\n')
11 st[i] = '\0';
12 else
13 while(getchar() != '\0')
14 continue;
15 }
16 return ret_value;
17 }
如果fgets()返回NULL,说明读到文件结尾或出现读取错误,s_gets()跳过了这个过程。其中的循环:
while(st[i] != '\n' && st[i] != '\0')
i++;
遍历字符串,直到遇到换行符或空字符。如果先遇到换行符,下面的if语句将其替换成空字符;如果先遇到空字符,else部分便丢弃输入行的剩余字符,然后返回与fgets()相同的值。
尽管s_gets()用于替换fgets()已经有了很大的改进,但还是不完美。如果遇到不合适的输入时,它毫无反应。它丢弃多余的字符时,也不通知程序也不告知用户,请读者完善。
fputs()函数
由于fgets()将换行符放在字符串的末尾(假设输入行不溢出),通常要与fputs()配对使用,除非该函数不在字符串末尾添加换行符。
fputs()函数接受两个参数:第1个是字符串的地址,第2个是文件指针,指明要写入的文件,该函数根据传入地址找到的字符串写入指定的文件中。如果要显示在计算机显示器上,应使用标准输出stdout作为参数。和puts()不同的是,puts()在打印字符串时,不会在其末尾添加换行符。其调用示例如下:
fputs(buf, fp);
其中,buf是字符串的地址,fp用于指定目标文件。注意,gets()丢弃输入中的换行符,但puts()在输出中添加换行符。而另一方面,fgets()保留了输入中的换行符,fputs()在输出中不会添加换行符。
字符串 相关文章:
- 字符串常量的定义与引用(08-14)