使用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
相关产品推荐
相关产品推荐

