You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中无需strncpy类函数,能否指向字符串的特定部分?

C语言中直接指向字符数组特定部分的实现方法(无需复制函数)

当然可以实现,完全不需要strncpy这类复制函数。C语言里的字符数组在内存中是连续存储的,你只需要找到目标子串的起始地址,直接让指针指向这个地址就行。

针对你的示例,有两种实用的实现方式:

  • 手动计算偏移量:数组名本身就是指向首元素的指针,你可以通过指针偏移直接定位到目标子串的起始位置。比如原字符串中"fox"的首字符'f'距离数组开头有16个字符(包含空格),代码可以这么写:
char string[] = "the quick brown fox jumps over the lazy dog";
char *pointer = string + 16; // 偏移后直接指向'f'
  • 使用strstr函数:如果不想手动数偏移量,标准库的strstr函数能自动查找目标子串第一次出现的位置,并返回其起始指针,更灵活通用:
#include <string.h>

char string[] = "the quick brown fox jumps over the lazy dog";
char *pointer = strstr(string, "fox");

这两种方式都没有复制任何内容,指针直接指向原字符数组里的"fox"区域,和原数组共享同一块内存。需要注意的是,如果原字符串是只读的字符串常量(比如char *string = "xxx"),通过指针修改内容会触发未定义行为,但你的示例中是char string[]定义的可修改字符数组,不存在这个问题。

内容的提问来源于stack exchange,提问作者raging-loon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:45:11