1. 考虑重叠的 memcpy
void* MemoryCopy(void *dest, const void *src, size_t size) { assert(dest != NULL); assert(src != NULL); if (src == dest) return dest; char *d; const char *s; if ((src > dest) || (src <= (char*)dest - size)) { d = (char*)dest; s = (const char*)src; while (size--) *d++ = *s++; } else /* overlap 重叠情况从高位到低位复制 */ { d = (char*)dest + size - 1; s = (const char*)src + size - 1; while (size--) *d-- = *s--; } return dest; }
2. 字符串分割(详细参见:https://www.cnblogs.com/htj10/p/11354618.html)
// delim分隔符,所有delim中包含的字符都是分隔符,保留空字符串"",前向分割 void split(const char* str, const char* delim, std::vector<std::string> &vRet) { const char* p = str; const char* q = NULL; while (*p && (q = strpbrk(p, delim))) { vRet.push_back(std::string(p, q)); ++q; p = q; } if (*p) vRet.push_back(std::string(p)); } // str是待分割的字符串 delim整体作为一个分隔符,保留空字符串"",前向分割 void split(const char* str, const char* delim, std::vector<std::string> &vRet) { const int n = strlen(delim); const char* p = str; const char* q = NULL; while (*p && (q = strstr(p, delim))) { vRet.push_back(std::string(p, q)); q = q + n; p = q; } if (*p) vRet.push_back(std::string(p)); }