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]; }