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
函数 - 若是数组,则需要逐个赋值。