You need to enable JavaScript to run this app. CS50 edX IDE中运行C代码出现scanf类型不匹配错误求助
优惠活动
大模型
产品
解决方案
定价
更多

CS50 edX IDE中运行C代码出现scanf类型不匹配错误求助

问题本质

这不是CS50配套IDE的故障,是代码参数类型和scanf格式要求不匹配触发的编译拦截。你之前写相似代码能正常运行,大概率是之前的代码没有多加那个多余的&,或是当时的编译检查规则没有现在严格,和软件故障没有关系。
CS50 IDE默认开启了最高等级的编译格式检查,把原本仅为警告的类型不匹配问题直接升级为阻断性错误,从根源上避免后续更隐蔽的内存问题。

报错提示的核心逻辑:scanf中%s格式符要求传入的入参是char *类型(指向字符的指针),你传入的参数类型完全不符合要求:

  • 你自己写的版本里:CS50头文件定义的string本质就是char *类型,写&name相当于取了这个字符指针的地址,最终传入的是char **(二级字符指针),和要求的char *类型完全错位。
  • 你抄来的数组版本里:char name[10]是字符数组,数组名作为参数传入时本身就会退化为指向首元素的char *,额外加的&name得到的是“指向整个10长度字符数组的指针”,虽然地址数值和数组首地址碰巧一致,但类型依然不满足%s的检查要求。
修正方案

直接去掉scanf语句里name前面的取地址符号&即可,两个版本的可运行代码如下:

  • 使用CS50自定义string类型的版本:
#include <cs50.h>
#include <stdio.h>

int main(void)
{
    string name;
    printf("Name: ");
    scanf("%s", name);
    printf("Hello %s\n", name);
}
  • 使用原生字符数组的版本:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char name[10];
    printf("Name: ");
    scanf("%s", name);
    printf("Hello %s\n", name);
}

注意:CS50 IDE的严格编译规则是课程故意设置的,目的是帮初学者尽早纠正编码习惯,不需要修改IDE配置就能正常运行修正后的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 21:45:08