C面试知识整理

scanf()读取匹配format(格式)字符串的输入. 当读取到一个控制字符, 它把值放置到下一个变量. 空白(tabs, 空格等等)会跳过. 非空白字符和输入匹配, 然后丢弃. 如果是一个在%符号和控制符间的数量, 那么只有指定数量的字符转换到变量中. 如果scanf()遇到一个字符集(用%[]控制字符表示), 那么在括号中的任意字符都会读取到变量中. scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF.

gets()函数从STDIN(标准输入)读取字符并把它们加载到str(字符串)里,直到遇到新行(\n)或到达EOF. 新行字符翻译为一个null中断符. gets()的返回值是读入的字符串,如果错误返回NULL.

calloc 
语法: 
#include 
void *calloc( size_t num, size_t size );

功能: 函数返回一个指向num 数组空间,每一数组元素的大小为size。如果错误发生返回NULL。

memset
语法:
  #include 
  void *memset( void *buffer, int ch, size_t count );

功能: 函数拷贝ch 到buffer 从头开始的count 个字符里, 并返回buffer指针。 memset() 可以应用在将一段内存初始化为某个值。例如:
memset( the_array, '\0', sizeof(the_array) );
这是将一个数组的所以分量设置成零的很便捷的方法。

qsort 
语法:    
#include   
void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) ); 

功能: 对buf 指向的数据(包含num 项,每项的大小为size)进行快速排序。如果函数compare 的第一个参数小于第二个参数,返回负值;如果等于返回零值;如果大于返回正值。函数对buf 指向的数据按升序排序。

fgetc 
语法: 
#include   
int fgetc( FILE *stream );

fgetc()函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF.

fopen 
语法: 
#include 
FILE *fopen( const char *fname, const char *mode );
fopen()函数打开由fname(文件名)指定的文件, 并返回一个关联该文件的流.
如果发生错误, fopen()返回NULL. 
mode(方式)是用于决定文件的用途(例如 用于输入,输出,等等) 

Mode(方式) 意义 
"r" 打开一个用于读取的文本文件 
"w" 创建一个用于写入的文本文件 
"a" 附加到一个文本文件 
"rb" 打开一个用于读取的二进制文件 
"wb" 创建一个用于写入的二进制文件 
"ab" 附加到一个二进制文件 
"r+" 打开一个用于读/写的文本文件 
"w+" 创建一个用于读/写的文本文件 
"a+" 打开一个用于读/写的文本文件 
"rb+" 打开一个用于读/写的二进制文件 
"wb+" 创建一个用于读/写的二进制文件 
"ab+" 打开一个用于读/写的二进制文件 
示例:
    char ch;
    FILE *input = fopen( "stuff", "r" );
    ch = getc( input );
fseek 
语法: 
#include  
int fseek( FILE *stream, long offset, int origin );

函数fseek()为给出的流设置位置数据. origin的值应该是下列值其中之一(在stdio.h中定义):

名称 说明
SEEK_SET 从文件的开始处开始搜索
SEEK_CUR 从当前位置开始搜索
SEEK_END 从文件的结束处开始搜索

fseek()成功时返回0,失败时返回非零. 你可以使用fseek()移动超过一个文件,但是不能在开始处之前. 使用fseek()清除关联到流的EOF标记. 
fread 
语法: 
  ##include 
  int fread( void *buffer, size_t size, size_t num, FILE *stream );

函数fread()读取[num]个对象(每个对象大小为size(大小)指定的字节数),并把它们替换到由buffer(缓冲区)指定的数组. 数据来自给出的输入流. 函数的返回值是读取的内容数量...

使用feof()或ferror()判断到底发生哪个错误.

ferror 
语法: 
#include  
int ferror( FILE *stream );

ferror()函数检查stream(流)中的错误, 如果没发生错误返回0,否则返回非零. 如果发生错误, 使用perror()检测发生什么错误.

perror 
语法:   
#include 
void perror( const char *str );

perror()函数打印str(字符串)和一个相应的执行定义的错误消息到全局变量errno中.

逗号运算符

逗号运算符确保操作数被顺序地处理:先计算左边的操作数,再计算右边的操作数。右操作数的类型和值作为整个表达式的结果。左操作数只是为了副作用需要而被计算,它其值会被丢弃。在计算完左操作数之后,存在一个序列点,例如:

x = 2.7, sqrt( 2*x )

在上述表达式中,在 sqrt()函数被调用之前,赋值运算会首先发生。整个表达式的值是此函数的返回值。

逗号运算符的优先级是所有运算符中最低的。因此,前述例子中的表达式 x=2.7 不需要括号。然而,如果希望逗号运算的结果用于另一个赋值运算中,就需要使用括号:

y = ( x = 2.7, sqrt( 2*x ));

上述语句会把 5.4 的平方根赋值给 y。

在初始化列表或函数参数列表中的逗号是列表元素的分隔符,它不是逗号运算符。在这些地方,也可以使用逗号运算符,但必须使用括号:

y = sqrt( (x=2.7, 2*x) );

这个语句等效于前面例子的语句。逗号运算符允许将多个表达式组合成为一个表达式。这个特点使得它适用于在 for 循环头部初始化或递增多个变量,如下例所示:

你可能感兴趣的:(C面试知识整理)