文件描述符 : 是计算机操作系统中被打开文件的唯一标识 . 它用来描述一种数据资源 , 以及这个数据资源可以如何被访问到。 scanf scanf**(**"%d"**,**c**);**// 读取整数数组 scanf() 函数,除了 %c 以外的转换说明,都不会读取空白字符(空格、制表符和回车)。 典型问题:换行符问题 #include <stdio.h>...
依赖NULL结束符来确定字符串的长度。没有正确使用NULL结束字符串会导致缓冲区溢出和其它未定义的行为。 为了避免缓冲区溢出,常常会用相对安全的限制字符数量的字符串操作函数代替一些危险函数。如: 用strncpy代替strcpy 用strncat代替strcat 用snprintf代替sprintf 用fgets代替gets 这些函数会截断超出指定限制的字符串,但是要...
依赖NULL结束符来确定字符串的长度。没有正确使用NULL结束字符串会导致缓冲区溢出和其它未定义的行为。 为了避免缓冲区溢出,常常会用相对安全的限制字符数量的字符串操作函数代替一些危险函数。如: 用strncpy()代替strcpy() 用strncat()代替strcat() 用snprintf()代替sprintf() 用fgets()代替gets() 这些函数会截断超...
依赖NULL结束符来确定字符串的长度。没有正确使用NULL结束字符串会导致缓冲区溢出和其它未定义的行为。 为了避免缓冲区溢出,常常会用相对安全的限制字符数量的字符串操作函数代替一些危险函数。如: 用strncpy()代替strcpy() 用strncat()代替strcat() 用snprintf()代替sprintf() 用fgets()代替gets() 这些函数会截断超...
数组符号[]、结构体成员访问运算符.、指向结构体成员运算符->,这类操作符前后不加空格。 对于表达式比较长的 for 语句和 if 语句,其表达式可以适当的删除一些空格,例如:for (i=0; i<10; i++){}。 缩进: 缩进为 4 个空格,通过键盘上的 Tab 键完成。缩进可以使程序更有层次感。原则是:如果地位相等,则...
如果fgets()读到一个换行符,会把它储存在字符串中。这点与gets()不同,gets()会丢弃换行符 fgets()函数的第3 个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin(标准输入)作为参数,该标识符定义在stdio.h中。 因为fgets()函数把换行符放在字符串的末尾(假设输入行不溢出),通 常要与 fputs()函数...
三、 标识符命名与定义 目前比较常用的如下几种命名风格: unix like风格:单词用小写字母,每个单词直接用下划线_分割,,例如text_mutex,kernel_text_address。 Windows风格:大小写字母混用,单词连在一起,每个单词首字母大写。不过Windows风格如果遇到大写专有用语时会有些别扭,例如命名一个读取RFC文本的函数,命令为Read...
头文件必须包含在任何外部声明或定义之外 必须在使用头文件中的任意声明之前包含头文件 头文件不一定是源文件 以下划线开头的外部标识符保留给标准库使用 输入输出<stdio.h> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 头文件<stdio.h>中定义的输入输出函数、类型以及宏的数目几乎占整个标准库的三分...
如果某个函数定义了两个restrict指针变元,编译程序就假定它们指向两个不同的对象,memcpy()函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如下: 代码: void *memcpy (void *s1, const void *s2, size_t size); 如果s1和s2所指向的对象重叠,其操作就是未定义的。memcpy()函数只能用于不重叠的...
1)保护符使用唯一名称; 2)不要在受保护部分的前后放置代码或者注释。 规则1.6 禁止在头文件中定义变量。 说明:在头文件中定义变量,将会由于头文件被其他.c文件包含而导致变量重复定义。 规则1.7 只能通过包含头文件的方式使用其他.c提供的接口,禁止在.c中通过extern的方式使用外部函数接口、变量。