为何VSCode对C语言代码char filename[] = scanf("%s", filename);报错?
你的C代码报错原因分析
核心错误点:
- 类型不匹配+初始化方式错误:
char filename[] = scanf("%s", filename);里,scanf的返回值是int类型(表示成功读取的输入项数量),但你试图用这个int值去初始化char类型的数组,完全不符合C语言的类型规则,这是编译器报错的直接原因。 - 逻辑顺序错误:在定义
filename数组的同时就把它传给scanf,此时数组还未完成初始化,没有分配好可用的存储空间,直接使用会触发未定义行为,逻辑上完全不成立。
正确写法示例:
先定义足够大小的数组,再调用scanf接收输入(建议限制输入长度,避免缓冲区溢出):
#include <stdio.h> int main() { // 定义256字节的数组,满足大多数文件名长度需求 char filename[256]; // %255s 限制最多读取255个字符,预留1个位置存字符串结束符'\0' scanf("%255s", filename); return 0; }
内容的提问来源于stack exchange,提问作者Hemalurgical_Potato
相关产品推荐
相关产品推荐

