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

使用strcpy()传入(char*, const char*)参数仍出现Segmentation Fault报错求助

问题原因

你遇到的段错误是因为char *athing;仅声明了一个字符指针,但未初始化,它指向的是内存中的随机地址(野指针)。当调用strcpy(athing, "World!");尝试往这个随机地址写入数据时,会访问不属于程序的内存区域,触发段错误。

解决方法

有三种常见修复方式:

1. 用数组替代指针

直接声明足够容纳字符串的字符数组,和thing的定义方式一致:

char thing[256];
char athing[256]; // 将指针改为数组
strcpy(thing, "Hello, ");
strcpy(athing, "World!");
printf("%s\n%s\n", thing, athing);

return 0;

2. 动态分配内存

用malloc为指针分配足够内存(需包含stdlib.h头文件),使用完毕后记得释放内存避免泄漏:

#include <stdlib.h> // 必须包含该头文件才能使用malloc

char thing[256];
char *athing = malloc(256 * sizeof(char)); // 分配256字节内存
if (athing == NULL) { // 检查内存分配是否成功
    fprintf(stderr, "内存分配失败\n");
    return 1;
}
strcpy(thing, "Hello, ");
strcpy(athing, "World!");
printf("%s\n%s\n", thing, athing);

free(athing); // 释放已分配的内存
return 0;

3. 让指针指向字符串常量(仅适用于只读场景)

如果athing只需要读取字符串、不需要修改内容,可以直接让它指向字符串常量:

char thing[256];
char *athing = "World!"; // 指向只读的字符串常量
strcpy(thing, "Hello, ");
// 注意:此时不能用strcpy修改athing指向的内容,字符串常量不可写
printf("%s\n%s\n", thing, athing);

return 0;
额外提醒
  • 使用strcpy时,目标内存空间必须足够大,能容纳源字符串加上末尾的\0结束符。
  • 野指针是C语言常见错误,使用指针前务必确保它指向有效的内存地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:46:01