【C语言】switch报error C2046: illegal case/default

本文介绍了一个常见的C语言switch语句语法错误:忘记使用花括号导致的非法case/default错误。通过对比错误与正确代码示例,解释了如何避免这类错误。

error C2046: illegal case/default

在我们刚刚开始接触switch时难免会出现这样的报错。提示我们非法输入,而刚开始我们也往往难以发现这个非法输入在哪。

#include<stdio.h>
main()
{
	int f;
	scanf("%d",&f);
	switch(f)
	case 1:printf("%d",f);
	case 2:printf("%d",f);
	default:printf("%d",f);
}

如上,这个switch会报错error C2046: illegal case,error C2047: illegal default
而实际上是我们写switch时缺少了"{" "}"这对花括弧。
正确的switch如下

#include<stdio.h>
main()
{
	int f;
	scanf("%d",&f);
	switch(f)
	{
	case 1:printf("%d",f);
	case 2:printf("%d",f);
	default:printf("%d",f);
	}
}

这样写就不会报错了

linux下,在下面的C语言代码中添加函数,如果路径不存在,则创建相关路径 static char* convert_fileid_to_filename(const char* file_id) { // 检查输入合法性 if (file_id == NULL) { DBPRINTF(DEBUG_LEVEL_ERROR, "illegal file_id: NULL\n"); return NULL; } if (strlen(file_id) != 14) { DBPRINTF(DEBUG_LEVEL_ERROR, "file_id length must be 14, got %zu\n", strlen(file_id)); return NULL; } // 提取前两位作为快照类型字符串("00"/"01"/"02") char type_str[3]; strncpy(type_str, file_id, 2); type_str[2] = '\0'; // 确保字符串终止符 int snapshot_type = atoi(type_str); // 根据类型确定基础路径 const char* base_path = NULL; switch (snapshot_type) { case PTZ_SNAPSHOT_PRESET: // "00"对应预设路径 base_path = PRESET_SNAPSHOT_PATH; break; case PTZ_SNAPSHOT_LIMIT: // "01"对应限制路径 base_path = LIMIT_SANPSHOT_PATH; break; case PTZ_SNAPSHOT_HOME: // "02"对应主页路径 base_path = HOME_SNAPSHOT_PATH; break; default: DBPRINTF(DEBUG_LEVEL_ERROR, "invalid snapshot_type: %s\n", type_str); return NULL; } // 提取最后5位作为文件ID后缀(14位字符串中索引9-13为最后5位) const char* file_id_suffix = file_id + 9; // 动态分配文件名缓冲区(避免返回局部变量) char* file_name = (char*)malloc(256); if (file_name == NULL) { DBPRINTF(DEBUG_LEVEL_ERROR, "malloc failed for filename buffer\n"); return NULL; } // 拼接完整文件路径 snprintf(file_name, 256, "%s/%s.jpeg", base_path, file_id_suffix); return file_name; }
最新发布
11-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值