【C编译】报错问题收集

这篇博客总结了C语言编程中常见的编译错误,包括未声明的标识符、初始化时丢弃常量限定符、可变长度对象未初始化、ld链接错误、程序中的非法字符、调试结果与运行结果不符、调试时无法输入以及数组类型的表达式赋值错误。针对每个错误,文章提供了详细的错误原因和修正方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、[Note] each undeclared identifier is reported only once for each function it appears in

[注] 每个未申报的标识符是为每一个函数似乎只报道一次(写错了或多写了标识符)

如:

printf("f("%s", "%s") = %d\n", p, q, result);

修改:

printf("f(\"%s\", \"%s\") = %d\n", p, q, result);

printf 函数里面 双引号需要 \ 才能无误地原样输出。

2、[Warning] initialization discards ‘const’ qualifier from pointer target type

[警告] 初始化时丢弃了从指针目标类型中丢弃了const限定符

如:

const int a[10] = {0};
char* p = a;			//会出现此Warning

解决办法:

const int a[10] = {0};
const int* p = a;

3、[Error] variable-sized object may not be initialized

[错误] 可变长度的对象没有被初始化

如:

int n = 5;
int a[n] = {1,2,3,4,5};

错因:
对于可变长度数组(长度由变量控制), 不能在该数组定义的同时初始化,需要在定义之后单独赋值初始化。

修改:

int n = 5;
int a[n];
memset(a, 0, sizeof(a));		//合法初始化,将a的所有元素初始化为0

4、[Error] ld returned 1 exit status

[错误] ld返回一个退出状态
可能原因:

  • 上一个运行结果没有关闭

5、[Error] stray ‘\241’ in program

可能原因:程序中有非法字符,可能不小心转换成全角输入了。

6、调试结果与运行结果不一致

如:

#include <stdio.h>
#include <string.h>

#define LEN 500    //限制输入的字符串长度

int main(){
    
    char str[LEN+1], differ[LEN+1];    //此处数组未初始化
    int len_str, len_differ;
    int i;
    
    scanf("%s", str);
    len_str = strlen(str);
    
    strncpy(differ, str, 1);
    len_differ = strlen(differ);
    //在differ中逐个检索str中的元素
    for(i=0; i<len_str; i++){
        //没被记录
        if( strchr(differ, str[i]) == NULL ){
            //单个字符拼接到differ末尾 
            differ[strlen(differ)] = str[i];
            differ[strlen(differ) + 1] = '\0';
        }
    }
    printf("%d", strlen(differ));
    
    
    return 0;
}

错误原因:暂且未知
解决办法:把数组初始化

7、调试时无法输入

问题描述:
点击调试后弹出对话框,但对话框立即最小化,且无法输入。

原因:
断点设置在 scanf 那一行。

解决办法:
修改断点,将断点设置在输入函数后面。

8、[Error] assignment to expression with array type

错误原因:

  • 数组不能直接给数组赋值。

解决办法:

  • 若是字符串,可使用strcpy函数
  • 若是数组,则需要逐个赋值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值