
字符串一般是用字符数组的方式存储如char str[]123456;这里str是一个字符数组它存放了一个字符串“123456”由于字符串还有一个结束符“\0”,所以此数组的长度为7而不是6.strcpy函数与memcpy函数strcpy函数与memcpy都是标致C库函数他们有下面的特点strcpy:提供了字符串的复制只用于字符串的复制并且它不仅复制字符串的内容还会复制字符串的结束符。memcpy:提供了一般内存的复制对于要复制的内容没有限制因此用途更广。不调用库函数实现strcpy函数#includestdio.h char * strcpy(char *strDest,const char * strSrc) { if((strDestNULL)||(strSrcNULL)) { return NULL; } char *start strDest; while(*strSrc!\0) { *strDest*strSrc; strDest; strSrc; } *strDest \0; return (start); } int main() { char buf[100]; strcpy(buf, hello c); printf(%s\n, buf); return 0; }进一步简化赋值、拷贝\0、指针自增、判断循环终止合并#includestdio.h char * strcpy(char *strDest,const char * strSrc) { if((strDestNULL)||(strSrcNULL)) { return NULL; } char *start strDest; while (*strDest *strSrc); return (start); } int main() { char buf[100]; strcpy(buf, hello c); printf(%s\n, buf); return 0; }实现计算字符串的长度#include stdio.h // 返回字符串长度失败返回0 int GetStrLen(const char* strSrc) { // 空指针保护 if (strSrc NULL) { return 0; } int len 0; // 没读到结束符就计数 while (*strSrc ! \0) { len; strSrc; } return len; } int main(void) { char str[] abc123; printf(长度%d\n, GetStrLen(str)); // 输出6 printf(空串长度%d\n, GetStrLen()); // 输出0 printf(空指针%d\n, GetStrLen(NULL)); // 输出0 return 0; }方法2int GetStrLen(const char* strSrc) { if (strSrc NULL) return 0; const char* p strSrc; while (*p) // *p ! \0简写 p; // 指针相减得到字符个数 return p - strSrc; }原理p从头走到\0的位置末尾指针 - 起始指针 中间有效字符数量核心逻辑拆解判空防止传入NULL解引用崩溃循环条件*strSrc ! \0只要不是结束符说明还有有效字符两种计数思路变量累加计数器len指针偏移后做差值运算无额外变量更高效