1. memcpy(拷贝内存内容)
【头文件】#include <string.h>
【函数原型】void *memcpy(void *dest, const void *src, size_t len);
【函数说明】拷贝src所指的内存内容前len个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整复制len个字节,不会因为遇到字符串结束符'\0'而结束。
【返回值】返回指向dest的指针。
【补充说明】指针src和dest所指的内存区域不可重叠。//使用memmove可以用来处理重叠区域。
【自定义实现】
void *memcpy(void *dest, const void *src, size_t len) { if(NULL == dest || NULL == src) { return NULL; // (void *)一定要返回一个指针 } char *tmpDest = dest; const char *tmpSrc = src; size_t i; for(i = 0; i < len; i++) { tmpDest[i] = tmpSrc[i]; } return dest; }
2. memmove(拷贝内存内容)
【头文件】#include <string.h>
【函数原型】void * memmove(void *dest,const void *src,size_t n);
【函数说明】memmove()与 memcpy()一样都是用来拷贝 src 所指的内存内容前 n 个字节到 dest 所指的地址上。不同的是,当 src 和 dest 所指的内存区域重叠时,memmove()仍然可以正确的处理,不过执行效率上会比使用 memcpy()略慢些。
【返回值】返回指向dest的指针。
【补充说明】指针src和dest所指的内存区域可重叠。
3. atoi(将字符串转换为整型数)
【头文件】#include <stdlib.h>
【函数原型】int atoi(const char *nptr);
【函数说明】atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符才开始做转换,而再遇到非数字或字符串结束符时才结束转换,并将结果返回。
【返回值】返回转换后的整型数
【补充说明】与使用strtol(nptr, (char **)NULL, 10); 结果相同
【自定义实现】
int myAtoi(char *str) { int sign = 1, base = 0, i = 0; while (str[i] == ' ') { i++; } if (str[i] == '-' || str[i] == '+') { sign = 1 - 2 * (str[i++] == '-'); } while (str[i] >= '0' && str[i] <= '9') { if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7)) { if (sign == 1) return INT_MAX; else return INT_MIN; } base = 10 * base + (str[i++] - '0'); } return base * sign; }
4. strstr(在一字符串中查找指定的字符串)
【头文件】#include <string.h>
【函数原型】char *strstr(const char *haystack,const char *needle);
【函数说明】strstr()会从字符串 haystack 中搜寻字符串 needle,并将第一次出现的地址返回。
【返回值】返回指定字符串第一次出现的地址,否则返回 0。
【自定义实现】
char *strstr(char *haystack, char *needle) { int i, j; for( i=0; i<strlen(haystack); i++ ) for( j=0; j<strlen(needle); j++ ) if ( haystack[i] != needle[j] ) break; if(i>=strlen(haystack)) return NULL; else return &haystack[i]; }