Linux标准I/O库常用函数总结(二)

6.fgetc,getc和getchar
函数原型:
#include <stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar();

        fgetc函数意为从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节并把取出的字节作为一个字符返回。如果读到文件末尾或者读取出错时返回EOF。
        getc函数的作用和fgetc一样,但它有可能被实现为一个宏,所以不能将其作为函数指针传(某些编译器可以)。

        getchar函数的作用相当于getc(stdin),从标准输入里读取下一个字符。

7.fputc,putc和putchar
函数原型:

#include <stdio.h>
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar();

       类似于fgetc和getc之间的关系,putc函数的作用也相当于fputc,但是可能被实现为一个宏。
       putchar相当于putc(c,stdout),把单个字符写到标准输出。有一点应该注意:putchar和getchar都是把字符当作int而不是char类型来使用的。

8.fgets和gets函数
函数原型:

#include <stdio.h>

char *fgets(char *s, int n, FILE*stream)
char *gets(char *s)

         fgets把读到的字符写入s指向的字符串里,直到出现下面某种情况:遇到换行符,已经传输了n-1个字符,或者到达文件尾。该函数会把换行符也接收到字符串里,再加上一个表示结尾的空字节\0。一次调用最多只能传输n-1个字符。
        gets函数类似与fgets,只不过它从标准输入读取数据并丢弃遇到的换行符。它在接收到的字符串尾部加上一个null字节。
        注意:gets()对传输字符的个数没有限制,所以可能会造成缓冲区溢出。所以,应该尽量使用fgets()代替,即fgets(buf,n,stdin)。

一个例子:

#include <stdio.h>

int main()
{
	char str1[20];
	char str2[20];
	fgets(str1,20,stdin);
	printf("str1: %s",str1);

	gets(str2);
	printf("str2: %s",str2);
	return 0;
}
命名为test,c,编译并运行,

$gcc test.c -o test
$./test
this is str1
str1:this is str1
this is str2
str2:this is str2$
注意最后一行的符号"$",因为fgets遇到换行符时(已传输字符小于n-1),会将遇到的换行符传递到接收字符串里;但是,如果已经传输了n-1个字符,就会停止再接收字符,所以例子中如果将fgets(str1,20,stdin)中的20该为5,则只会传输前4个字符,并且没有换行符。而gets会丢弃遇到的换行符,所以"$"没有另起一行。

你可能感兴趣的:(getchar,gets,fgets,fgetc,fputc,putchar,getc,putc)