c指令的积累

实践过程中的一些c函数/指令及含义的积累。

函数积累

函数/指令 含义 补充说明 对应函数头文件
int main(intargc,charargv[],charenvp[]); 对于其参数说明见图1 envp:存放系统的环境变量,保存用户环境中的变量字符串,以NULL结束,envp一旦传入,它就只是单纯的字符串数组而已,不会随着程序动态设置发生改变。可以使用putenv函数实时修改环境变量,也能使用getenv实时查看环境变量,但是envp本身不会发生改变 #include <stdio.h>
scanf(“格式控制字符串”, 地址表列); 其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的 &a、&b分别表示变量a和变量b的地址 #include <stdio.h>
char strstr( char str, char * substr ); 用来检索子串在字符串中首次出现的位置,str为要检索的字符串,substr为要检索的子串 返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL #include <string.h>
void memcpy(void dest, const void *src, size_t n); memcpy() 会复制 src 所指的内存内容的前 num 个字节到 dest 所指的内存地址上 如图2 #include <string.h>
char gets(char string) gets()函数从流中读取字符串,直到出现换行符或读到文件尾为止,最后加上NULL作为字符串结束; 所读取的字符串暂存在给定的参数string中,若成功则返回string的指针,否则返回NULL 由于gets()不检查字符串string的大小,必须遇到换行符或文件结尾才会结束输入,因此容易造成缓存溢出的安全性问题,导致程序崩溃,可以使用fgets()代替 #include <stdio.h>
ssize_t read(int fd, void * buf, size_t count); read()会把参数fd 所指的文件传送count 个字节到buf 指针所指的内存中 若参数count 为0, 则read()不会有作用并返回0. 返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动,更多说明见图3 #include <unistd.h>
char strcpy(char dest, const char *src); strcpy()会将参数src 字符串拷贝至参数dest 所指的地址,然后返回参数dest 的字符串起始地址 由于该函数没有检查数据长度,如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出,在编写程序时请特别留意,或者用strncpy()来取代 #include <string.h>
void free (void* ptr); ptr 为将要释放的内存空间的地址,free()可以释放由 malloc()calloc()realloc() 分配的内存空间,free() 只能释放动态分配的内存空间,如果 ptr 所指向的内存空间不是由上面的三个函数所分配的,或者已被释放,那么调用 free() 会有无法预知的情况发生,如果 ptr 为 NULL,那么 free() 不会有任何作用 free() 不会改变 ptr 变量本身的值,调用 free() 后它仍然会指向相同的内存空间,但是此时该内存已无效,不能被使用。所以建议将 ptr 的值设置为 NULL #include <stdlib.h>
int strcmp(const char s1, const char s2); 见图4 见图4 #include <string.h>
long int strtol (const char* str, char** endptr, int base); 将字符串转换为长整型数(long) 见图5 #include <stdlib.h>
int strncmp ( const char str1, const char str2, size_t n ); 用来比较两个字符串的前n个字符,区分大小写,str1, str2 为需要比较的两个字符串,n为要比较的字符的数目 见图6 #include <string.h>
int atoi (const char * str); 将字符串转换成整数(int) 见图7 #include <stdlib.h>
char strset( char s, char c); 将字符串中的所有字符都设置为一个指定字符,s为要设置的字符串,c为指定字符;返回设置后的字符串指针,即 s strset() 不会生成新字符串,而是修改原有字符串,因此它只能操作字符数组,不能操作字符串指针指向的字符串,因为字符串指针指向字符串常量,常量不能被修改。如果你希望指定要设置的字符的个数,可以使用strnset()。 #include<string.h>
void memset( void ptr, int value, size_t num ); 用来将指定内存的前n个字节设置为特定的值, 返回指向 ptr 的指针。ptr 为要操作的内存的指针。value 为要设置的值。你既可以向 value 传递 int 类型的值,也可以传递 char 类型的值,int 和 char 可以根据 ASCII 码相互转换。num 为 ptr 的前 num 个字节,size_t 就是unsigned int。 memset() 可以将一段内存空间全部设置为特定的值,所以经常用来初始化字符数组;参数 value 虽声明为 int,但必须是 unsigned char,所以范围在0 到255 之间。 #include <string.h>
clock_t clock(void); 返回处理器调用某个进程或函数所花费的时间,clock_t其实就是long,即长整形。该函数返回值是硬件滴答数,要换算成秒或者毫秒,需要除以CLK_TCK或者CLOCKS_PER_SEC。比如,在VC++6.0下,这两个量的值都是1000,这表示硬件滴答1000下是1秒,因此要计算一个进程的时间,用clock()除以1000即可。 C语言中求程序执行的时间可以使用clock()函数,函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数。 #include <time.h>
FILE fopen(const char path, const char * mode); 用来以指定的方式打开文件,path为包含了路径的文件名,mode为文件打开方式。文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL。更多说明详见图8. 文件操作完成后,需要将文件关闭,一定要注意,否则会造成文件所占用内存泄露和在下次访问文件时出现问题。文件关闭后,需要将文件指针指向空,这样做会防止出现游离指针,而对整个工程造成不必要的麻烦,如fp = NULL。 #include <stdio.h>
char fgets(char string, int size, FILE * stream); 用于从文件流中读取一行或指定个数的字符。 更多说明见图9。 include<stdio.h>
char strcat(char dest, const char *src); 用来连接字符串,dest 为目的字符串指针,src 为源字符串指针,返回dest 字符串起始地址。 strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。 dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。 #include <string.h>
int isalpha(int c); 用来判断一个字符是否是英文字母,相当于 isupper(c)/islower(c)。 c 为需要被检测的字符,若参数c 为英文字母(a ~ z A ~ Z),则返回非 0 值,否则返回 0 #include <ctype.h>
int getche(void); 该函数没有参数,从控制台读取字符,并在控制台显示读取的字符ASCII码值。 #include<stdio.h> #include<conio.h>
double pow(double x, double y); 用来计算以x 为底的 y 次方值,然后将结果返回。 见图10 #include <math.h>

补充

图1——

图2——

图3——

图4——

图5——

strtol(), strtoll(), strtoul(), strtoull()函数参数如下图;

第一个参数 nptr是要转化的字符串;
第三个参数base说明nptr的进制,base 的取值范围为 0,2-36;
http://zengwu3915.blog.163.com/blog/static/27834897201262562912597/

图6——

图7——

图8——

图9——

图10——

(int )ip 和 int ( ip)的区别;