编辑器 + 编译器 + 调试工具 + 项目管理软件。 * 字符串操作, 包括字符测试,字符串拷贝,比较,查找,连接与分割等。 * 数据转换,包括字母大小写转换,字符串转换与整数,浮点数之间的转换。 * 内存分配与释放。 * 时间和日期,包括时间和日期的获取,显示以及时间的计算等。 * 其他应用,包括命令行参数的分析,用户和用户组操作以及环境变量操作。 9.1 字符串操作 『 9.1.1 字符测试 #include <ctype.h> int isalpha(int c) 测试字符是否为英文字母 int isdigit(int c) 测试字符是否为数字 9.1.2 字符串初始化 #include <string.h> void *memset(void *buffer, int c, int count); 将buffer所指向内存区域的前count字节设为字符c。 9.1.3 字符串的复制 (1), char *strcpy(char *dest, char *src); (2), char *strdup(char *s); (3), void *memcpy(void *dest, const void *src, size_t n); 功能是将参数 src 所指向的内存区域复制 count 字节到参数 dest 所指向的内存区域中,参数 src 和 dest 所指向的内存区域不可以重叠,函数返回指向 dest 的指针。而 strcpy 函数一旦遇到字符串结束符立即停止。memcpy 则不是,它不检查复制的具体内容。 (4), void *memmove(void *dest, const void *src, size_t count); 功能是将参数 src 所指向的内存区域复制 count 字节到参数 dest 所指向的内存区域中,返回指向dest的指针。但是它与 memcpy 的主要差别在于参数src 和 dest 所指向的内存区域可以重叠。 9.1.4 字符串比较 (1), int strcmp(const char *s1, const char *s2); (2), int strncmp(const char *s1, const char *s2, size_t n); (3), int strcasecmp(const char *s1, const char *s2); (4), int strncasecmp(const char *s1, const char *s2, size_t n); (5), int memcmp(const void *s1, const void *s2, size_t n); 功能是比较参数 s1 和 s2 所指向内存区域的前 count 个字节,不管里面有没有字符串结束符。 9.1.5 字符/字符串查找 (1) char *index(const char *s, int c); char *rindex(const char *s, int c); (2) strchr / strrchr char *strchr(const char *s, int c); char *strrchr(const char *s, int c); index(s, '\0'); rindex(s, '\0'); 对于 strchr / strrchr 是不可以的。 (3) char *strstr(const char *haystack, const char *needle); 9.1.6 字符串的连接与分割 (1), char *strcat(char *dest, const char *src); 注意 : 必须确保 dest 指向的缓冲区足够大。 char *strncat(char *dest, const char *src, size_t n); src前n个字符没结束符,则接后自己加 (2), char *strtok(char *str, const char *delim); 可以指定一个或多个分隔符。如果在字符串中找到任何一个分隔符,则将其更改为字符串结束符。 第一次调用该函数时,参数str必须设为要分割的字符串,以后调用时设为NULL。 strtok 函数每次调用成功后,返回下一个分割的字符串指针,如果已无从分割则返回NULL。 #include <iostream> #include <cstring> #include <cstdio> using namespace std; int main() { char str[] = "Linux C Programming"; char *p; p = strtok(str, " "); while(p != NULL) { printf("%s\n", p); p = strtok(NULL, " "); } printf("str : %s\n", str); return 0; } -9.2 数据转换 『英文字母大小写转换,字符串与整数,浮点数之间』 #include <ctype.h> int toupper(int c); int tolower(int c); #include <stdlib.h> int atoi(const char *nptr); long atol(const char *nptr); 对字符串进行扫描,直到出现数字或正负号才开始转换,之后出现非数字或字符串结束符即结束转换,只10进制。 double atof(const char *nptr); double strtod(const char *nptr, char **endptr); - char *gcvt(double number, size_t ndigits, char *buf); -9.3 内存分配与释放 内存分配与释放的函数有 alloca, malloc, calloc, realloc, 以及 free 函数。 #include <stdlib.h> void *alloca(unsigned size); void *malloc(unsigned size); void *calloc(size_t nmemb, size_t size); void free(void *ptr); void *realloc(void *ptr, size_t size); -9.4 时间和日期 1, time 函数 #include <time.h> time_t time(time_t *t); 2, gettimeofday 函数 #include <unistd.h> #include <sys/time.h> int gettimeofday(struct timeval *tv, struct timezone *tz); 9.4.2 时间和日期的显示 ctime, gmtime, asctime 函数用来将时间和日期转换为字符串格式。 时间的计算 double difftime(time_t time1, time_t time0); -9.5 其他应用 其他应用包括 : 命令行参数分析,用户,用户组操作以及环境变量设置等。 9.5.1 命令行参数分析 int main(int argc, char **argv) 或 int main(int argc, char *argv[]) 文件名本身作为第一个参数,其后的参数依次赋给 agrc. #include <unistd.h> int getopt(int argc, char *const argv[], const char *optstring); optstring为选项字符串。 optarg, optind, optopt; 9.5.2 用户和用户组操作 相关的函数 :getuid, getgid, getlogin, getpwent, getpwnam, getutent等。 1, #include <unistd.h> #include <sys/types.h> uid_t getuid(void); 获取当前用户标识符。 2, gid_t getgid(void); 3, char *getlogin(void) 获取当前用户的帐号名称。 4, #include <pwd.h> #include <sys/types.h> struct passwd *getpwent(void); 可以读取 /etc/passwd 所有用户账户信息。 endpwent. 5, #include <pwd.h> #include <sys/types.h> struct passwd getpwnam(const char* name); 6, #include <utmp.h> /var/run/utmp 记录着当前登陆用户的信息,可以用该函数读取。 struct utmp *getutent(void); endutent. 9.5.3 环境变量操作 环境变量是包含系统环境信息的字符串,可以作用于用户的整个工作空间。 getenv, putenv, setenv; 获取更改增加环境变量。 1, #include <stdlib.h> char *getenv(const char *name); 例如 :char *p = getenv("SHELL"); 2, putenv 函数用于更改或增加环境变量 int putenv(const char *string); 3, int setenv(const char *name, const char *value, int overwrite); 参数 overwrite 用来设定是否替换已存在环境变量的内容。