C语言学习——错误记录
2017-02-27 00:00
302 查看
1. error: empty character constant
直译:空的字符定义。错误分析:
原因是连用了两个单引号,而中间没有任何字符。一般的,单引号表示字符型常量,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待)。两个单引号之间不加任何内容是不允许的。
案例:
代码第三行,定义char数组,数组中第二个元素,本该是个空格,但是却在两个单引号中漏了空格字符。
#include<stdio.h> void main(){ char c[]={'I','','a','m',' ','a',' ','g','i','r','l','.'}; int i,len=strlen(c); for(i=0;i<len;i++){ printf("%c",c[i]); } printf("\n"); }
2.warning: incompatible implicit declaration of built-in function ‘strlen’
直译:内置函数strlen不兼容的隐式声明错误分析:c语言中,如果一个函数没有显示地声明就使用,被看作是隐式声明。现在,gcc已经为一些标准函数做了定义,如果隐式声明与gcc的定义不匹配,就会有warning提示。(In C, using a previously undeclared function constitutes an implicit declaration of the function. In an implicit declaration, the return type is int if I recall correctly. Now, GCC has built-in definitions for some standard functions. If an implicit declaration does not match the built-in definition, you get this warning.)
所以,还可能出现这个问题:“我的程序用到了函数strlen,以前在redhat9.0下编译可以通过,为什么在fedora8下面却出现错误?”,可能是gcc不同的编译版本问题。
案例:上面1中的案例
解决方案:头部加引入 #include<string.h>
如下:
#include<stdio.h> #include<string.h> void main(){ char c[]={'I',' ','a','m',' ','a',' ','g','i','r','l','.'}; int i,len=strlen(c); for(i=0;i<len;i++){ printf("%c",c[i]); } printf("\n"); }
3、strlen()函数
strlen() 函数计算的是字符串的实际长度,遇到第一个'\0'结束。如果str的结尾不是'\0',strlen()会继续向后检索,直到遇到'\0',而这些区域的内容是不确定的。示例:
#include<stdio.h> #include<string.h> void main(){ char c[10] = {"china"}; char d[] = {'c','h','i','n','a','\0'}; char e[] = {'c','h','i','n','a'}; char f[] = "china"; printf("lenc=%d\n",strlen(c)); printf("lend=%d\n",strlen(d)); printf("lene=%d\n",strlen(e)); printf("lenf=%d\n",strlen(f)); }
运行结果:
我们看到"lene=10"这一行,明显是错误的结果。就是由于数组中没有添加结束符'\0'导致的。而c和f因为使用了双引号,自动识别为字符串,已包含结束符'\0 '.
相关文章推荐
- 关于“所有记录中均未找到搜索关键字”的错误
- 方便好用的 ASP.Net 错误记录发布模块 ELMAH (Error Logging Modules And Handlers)
- 关于:Update后引发 并发冲突:DeleteCommand 影响 0 个记录 的错误
- 关于记录错误信息到文本文件的几点问题讨论
- 记录错误日志
- 如何覆盖PB的系统函数 比如Messagebox 以记录Messagebox错误日志 或者实现MESSAGEBOX信息的翻译
- Asp.Net 2.0 中错误处理的几种方法(发邮件及记录信息到系统事件中)
- CS1705: 程序集版本高于所引用的程序集错误记录
- 使用Jmail及Winwebmail发信时系统记录中的错误:502 Error: command ...
- ASP里面的添加记录权限错误
- asp开发记录(1)——[Microsoft][ODBC Microsoft Access Driver]行中有错误
- [记录]编译器错误信息: CS0016: 未能写入输出文件
- access备注字段的的错误:“所有记录中均未找到搜索关键字”
- asp开发记录(1)——[Microsoft][ODBC Microsoft Access Driver]行中有错误
- 修改记录字段值时错误Row cannot be located for updating的解决方法
- 项目错误记录
- windows2003事件记录中显示组策略错误,登录域控制器很慢(服务器自身)
- 终于解决项目发布后无法记录错误日志
- svnmanager错误及解决方法记录
- NHibernate的初学几点错误记录