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

如何编写接收输入单词并打印的C程序?代码报signal 11错误如何解决

报错原因

Signal 11是段错误(Segmentation Fault),触发原因是程序访问了无权限访问的内存地址,你的代码存在两个核心问题:

  • 变量声明错误:char *goodnight_message[20]声明的是长度为20的字符指针数组,本质是存储20个指针的空间,没有分配存储字符串的实际字符内存,无法直接存储用户输入的内容。
  • 输入输出参数使用错误:scanf("%s", &goodnight_message)把用户输入的字符串直接写入了指针数组本身的内存地址,覆盖了原本的指针存储区域,后续printf对被非法覆盖的指针做解引用操作时,访问到了非法内存地址,直接触发段错误。
修复后代码
#include <stdio.h>

int main() 
{
    // 声明字符数组,分配20字节的连续存储空间用来存放输入的字符串
    char goodnight_message[20];
    printf("Enter the goodnight message.\n");
    // 数组名本身就是首地址,不需要取地址符,加长度限制避免缓冲区溢出
    scanf("%19s", goodnight_message);
    printf("%s Buddy.\n", goodnight_message);
    return 0;
}
修复说明
  • 变量声明调整:把char *goodnight_message[20]改为char goodnight_message[20],直接声明字符数组,分配20字节的连续内存用来存储输入的字符串。
  • 输入逻辑调整:scanf参数去掉取地址符&,同时添加长度限制%19s,最多读取19个字符,留1位存储字符串结束符\0,避免缓冲区溢出风险。
  • 输出逻辑调整:printf直接传入字符数组名即可,不需要加解引用符*。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 04:45:00