C语言遇到的错误和解决方案~~~持续更新,记录成长的过程

1.error C2296: '&' : illegal, left operand has type 'char [3]'
scanf("%d" &x);
少了一个逗号
scanf("%d", &x);

2.char数组,没有定义数组长度的时候,运行会崩溃

解决方法:char型数组记得一定要定义一个长度

3.char数组定义长度后,但是赋值的时候并没有赋值那么长,控制台打印出现“烫烫烫..............”,
那是因为你没有赋值完,程序会将后面的默认赋值为CC h,打印出来就成了烫字
比如,你定义的数组是char a[10],最后你从控制台输入的字符数组为“lisi”,这个“lisi”的长度为5,所以后面的存储空间就默认为cccccch了,打印出来的就是烫字

4,如何定义变长的char数组
//(1).动态分配啊~每次都分配,每增加一个字符,就动态分配一个char字符空间给他
//char * p =(char*)malloc(sizeof(char)*1)等等
(2).没办法定义 ”变长数组“
char array[x];

x的值 在定义(分配空间时)必须指明 或者程序能得到x的值。

变长数组 基本实现思路是
申请一块内存 可存放x个元素 当元素的个数大于x后增加x/n个元素空间(可以使用内存复制)
数组对长度要求是静态的。全局数组在系统初始化时在数据段为其分配空间,如果数组大小不明确,数据段无法为其分配空间,因为还有别的数据需要在数据段分配空间;局部变量数组在创建函数调用栈时也要求数组指定大小,因为局部变量是在栈底分配空间的,如果数组大小不明,栈的后续增长就不知道从哪里开始了。

一般对于这种需求,都是临时根据需要申请动态内存来用。

5.fatal error C1010: unexpected end of file while looking for precompiled header directive
在vc6.0下面出现这个错误,一般是没有加头文件StdAfx.h
在cpp文件前面加上#include "stdafx.h",重新编译即可

6.D:\test2\test2.cpp(15) : error C2106: '=' : left operand must be l-value
;
error C2106: '=' : left operand must be l-value
是说: '='左边必须是变量,不能是常量或者表达式
比如,下面的几个例子,都是同样的错误:
5=3;
(i+j)=3;

7.strlen(ch),这里的ch为char *型
要字符数组的长度,则sizeof(ch)

8.头文件中有.h和没有.h的区别
有.h是c语言的头文件
没有.h是C++的头文件
以<string>和<string.h>为例:
在c++中,这样用:
#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件

using  std::string;

using  std::wstring;

using namespace std;

在C语言中是
#include <string.h>

9,C语言中,定义字符数组,然后从键盘输入字符串赋值给整形数组
char stu1[i].name[];
scanf("%s",stu1[i].name);
和gets(stu1[i].name);
这两者有却别的就是
scanf以空格为结束
gets以 换行符作为结束

10.c语言文件读写函数
fwrite
fputs
fprintf都是可以写的,但是呢,fwrite写入的数据是二进制,打开看肯定是乱码
fputs是读入字符串,记事本打开可以看见
fprintf,是读入整形浮点型数据,记事本打开可以看见
fprintf(fp, "%d, %f, %f\n", x, y, z);
这三种写的文件都是可以读取的

11.c语言.chm 文档要好好看,找函数原型了解
百度,函数原型了解各种参数的含义
基础知识是很重要的

12.浮点型数组的定义:float f[100];
13.atoi函数,把字符串转换成整形
14.把一个10以内整数转行成字符
int 9
char s
s=9+'0';//s=9+48;
printf("%s",s);
输出为9;即s='9'

ostream_iterator<string> output(cout," : ");
//ostream_iterator<srting> output=(cout,","); 拼写错误啦!string,而不是srting

2015-2-3

9.getchar()和gets()的区别

C:\Windows\System32\KernelBase.dll', no matching symbolic information found.
表示调用dll时传入的参数有错误,
这个参数可以是printf,scanf等系统函数的格式,多注意逗号,一般新手会出现这样的编译错误
这个参数可以是函数传参的格式,类型等等
这个参数也可能是else if中的参数
这里有个技巧就是。用else的时候一定带上if,养成习惯
调试到出现错误的地方,在这附近的凡是出现参数的地方都检查一下

const和define的区别

尽可能将全局变量定义都在执行语句的最前面,要么可能会出错

如果printf里面传入一个函数,打印出来的是0,那么先定义一个变量。给这个变量赋值为函数的返回值
然后在printf里面打印这个变量

有一个函数:float sum(float num[],int x,int n)
printf("结果为:%f\n",sum);打印为0;

试试
float res;
res=sum(a,x,n);
printf("结果为:%f\n",res);

c下面strlen(str1)
c++下面 str1.length();

-858993460
最近使用VC++6.0时发现以下情况:
1.当一个未初始化赋值的时候,他在内存就默认保存为-858993460;
2.如果变量的数据类型由于你的运算的溢出了,在内存中系统就自动改为-858993460。
注:一般的书上都会说如果一个变量未付值,系统会给他一个随机值。但实际测试VC++6.0 里实际上是-858993460。TC上的数值是随机,每次都不一样。

int result;
printf("%d",result);

友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。

isdigit函数
ctype.h

2015-2-16
1.vc 6 ide 不能打开了,一直停留在打开页面,一般是插件出了问题,可能是损坏,可能是过期了之类的,总之尝试着把插件卸载~就可以打开vc 6了

2.unsigned char Prior[8][8] =
{ // 运算符优先级表
////// '+' '-' '*' '/' '(' ')' '#' '^'
/*'+'*/'>','>','<','<','<','>','>','<',
/*'-'*/'>','>','<','<','<','>','>','<',
/*'*'*/'>','>','>','>','<','>','>','<',
/*'/'*/'>','>','>','>','<','>','>','<',
/*'('*/'<','<','<','<','<','=',' ','<',
/*')'*/'>','>','>','>',' ','>','>','>',
/*'#'*/'<','<','<','<','<',' ','=','<',
/*'^'*/'>','>','>','>','<','>','>','>'
};
3,。VC6.0装了visual assist x补全代码具体怎么用?
输入字母后会像输入法那样出现一个菜单
但是怎么选择菜单里面的内容呢?
什么 回车 上下左右 按了都不是。、。。。
鼠标双击可以 但是太麻烦。。。
主要是不知道怎么选择
就是上下选中不了。。。按上下 就到 上一行或者下一行代码去了。。。
不会自动补齐的。。。只会显示。。。如果不选还是要自己打出完整的代码!!

安装一个高版本的visual assist x

4.overloaded function as left operand
因为你的left operand不知道是函数还是变量。。
如果是头文件中的函数名或者关键字,就不能定义成变量
5.illegal use of this type as an expression
格式错误,将这个变量定义在这个函数的第一行,养成良好的习惯~

2015-2-27
In function ‘void* client_thread2(void*)’:
multi_client_test_demo.cpp:167: 错误:expected ‘)’ before ‘;’ token
multi_client_test_demo.cpp:167: 错误:expected primary-expression before ‘)’ token
ulti_client_test_demo.cpp:167: 错误:expected ‘;’ before ‘)’ token
multi_client_test_demo.cpp:340: 错误:expected ‘}’ at end of input

这个错误是定义错误
返回代码查看167是while(j < REPEAT_TIME),然后找REPEAT_TIME的定义发现是“#define REPEAT_TIME 2000;”这里细心一点会发现2000后面的;是多余的,去掉重新编译就好了
再出现类似错误也可能是全角和半角的问题,或者{误写成了(之类的

上一篇:JS判断IE,FF,Opera,Safari等浏览器类型


下一篇:mysql关于timestamp类型