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

如何从char*类型指针获取字符串且不修改char *p = "cat"声明语句?

原代码问题说明

你给出的代码存在两个核心错误,导致无法正常运行:

  • char a = *p仅对指针p做了一次解引用,只拿到了字符串的第一个字符'c',无法获取完整字符串
  • printf("%c", &a)存在类型不匹配问题:%c格式符期望接收char类型的字符值,你传入的是变量a的地址(char*类型),属于未定义行为,会出现输出乱码、程序崩溃等异常。

不修改char *p = "cat"前提下获取完整字符串的实现方案

因为p本身就是指向字符串字面量"cat"首地址的char*指针,且C语言中的字符串字面量默认在末尾追加\0作为结束标识,可根据你的使用场景选择对应方案:

方案1:直接读取/打印字符串

如果仅需要读取、打印字符串内容,不需要后续修改内容,直接将p传给字符串操作接口即可:

// 直接打印整个字符串
printf("%s", p);

方案2:拷贝字符串到可修改的内存空间

如果需要后续修改拿到的字符串内容(字符串字面量本身是只读的,直接修改p指向的内容会触发未定义行为),可以将p指向的字符串拷贝到栈数组或动态申请的堆空间中:

  • 用栈数组存储:
#include <string.h>

// 数组长度至少为字符串长度+1,预留位置存储结束符'\0'
char buf[4];
strcpy(buf, p);
// 后续buf中存储的就是完整的"cat",可正常读写操作
  • 用动态堆内存存储:
#include <stdlib.h>
#include <string.h>

// 动态申请内存,长度为字符串长度+1
char *buf = (char*)malloc(strlen(p) + 1);
if (buf != NULL) {
    strcpy(buf, p);
    // buf中存储的就是完整的"cat",使用完成后记得释放内存避免泄漏
    free(buf);
}

内容的提问来源于stack exchange,提问作者user16918038

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:36:06