news 2026/7/3 18:49:58

字符串与数组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
字符串与数组

字符串一般是用字符数组的方式存储,如:char str[]="123456";

这里str是一个字符数组,它存放了一个字符串“123456”,由于字符串还有一个结束符“\0”,所以此数组的长度为7而不是6.

strcpy函数与memcpy函数:

strcpy函数与memcpy都是标致C库函数,他们有下面的特点:

strcpy:提供了字符串的复制,只用于字符串的复制,并且它不仅复制字符串的内容,还会复制字符串的结束符。

memcpy:提供了一般内存的复制,对于要复制的内容,没有限制,因此用途更广。

不调用库函数实现strcpy函数

#include<stdio.h> char * strcpy(char *strDest,const char * strSrc) { if((strDest==NULL)||(strSrc==NULL)) { 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、指针自增、判断循环终止合并

#include<stdio.h> char * strcpy(char *strDest,const char * strSrc) { if((strDest==NULL)||(strSrc==NULL)) { 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; }

方法2:

int GetStrLen(const char* strSrc) { if (strSrc == NULL) return 0; const char* p = strSrc; while (*p) // *p != '\0'简写 p++; // 指针相减得到字符个数 return p - strSrc; }

原理:

  1. p从头走到\0的位置
  2. 末尾指针 - 起始指针 = 中间有效字符数量

核心逻辑拆解

  1. 判空:防止传入NULL解引用崩溃
  2. 循环条件:*strSrc != '\0',只要不是结束符说明还有有效字符
  3. 两种计数思路:
    • 变量累加计数器len++
    • 指针偏移后做差值运算(无额外变量,更高效)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 18:45:53

构建健壮的GPG密钥体系:主密钥与子密钥分离架构实战指南

1. 项目概述&#xff1a;为什么现代开发者需要一个坚实的GPG密钥体系&#xff1f;如果你在开源社区提交过代码&#xff0c;或者在某个安全邮件列表里发过邮件&#xff0c;很可能已经接触过GPG&#xff08;GNU Privacy Guard&#xff09;。它看起来像是一串神秘的字符&#xff0…

作者头像 李华
网站建设 2026/7/3 18:44:16

困难任务推进不动时,我用0.1%最小成功法自救

目录1. 你真正卡住的&#xff0c;不是事情难&#xff0c;而是“成功阈值太高”2. 什么叫“0.1%最小成功”&#xff1f;第一&#xff0c;足够小第二&#xff0c;真实推进第三&#xff0c;可验证3. 你急躁时&#xff0c;最该做的是“降目标”&#xff0c;不是“加鸡血”4. 一个很…

作者头像 李华
网站建设 2026/7/3 18:44:14

终极指南:如何用SecGPT网络安全大模型提升你的安全防御能力

终极指南&#xff1a;如何用SecGPT网络安全大模型提升你的安全防御能力 【免费下载链接】SecGPT SecGPT网络安全大模型 项目地址: https://gitcode.com/gh_mirrors/se/SecGPT 在当今数字化的世界里&#xff0c;网络安全已成为每个组织和个人的核心关切。面对日益复杂的网…

作者头像 李华
网站建设 2026/7/3 18:43:51

Dynamsoft_Barcode_Reader_Python 11.4.3000

​Robust Barcode Scanner SDK with Flexible APIs Whether it’s distorted, dark, distant, blurred, DPM, batch or moving, we can scan it. At speed. Engineered for High-Performance Barcode Scanning Scan 500 Barcodes per Minute--Dynamsoft_Barcode_Reader_Python…

作者头像 李华
网站建设 2026/7/3 18:42:00

BiSheng JDK 21模块化系统深度解析:Java模块化架构最佳实践

BiSheng JDK 21模块化系统深度解析&#xff1a;Java模块化架构最佳实践 【免费下载链接】bishengjdk-21 BiSheng JDK 21 is a high-performance, production-ready distribution of OpenJDK 21. 项目地址: https://gitcode.com/openeuler/bishengjdk-21 前往项目官网免费…

作者头像 李华