文档章节

C语言学习——错误记录

Sandy_guoguo
 Sandy_guoguo
发布于 2017/02/27 10:17
字数 624
阅读 5
收藏 0

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 '.

© 著作权归作者所有

共有 人打赏支持
Sandy_guoguo
粉丝 6
博文 18
码字总数 5510
作品 0
海淀
程序员
私信 提问
如何学好C语言?为什么会有学的既不深,也不扎实,半吊子的感觉

如何学好C语言?为什么会有学的既不深,也不扎实,半吊子的感觉 C/C++学习,解答,技术内容更多尽在:C/C++学习群:99816772 我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编...

这个人很懒什么都没留下
2017/12/20
0
0
各种基本算法实现小结(六)—— 查找算法

各种基本算法实现小结(六)—— 查找算法 (均已测试通过) =================================================================== 1、简单查找 在一组无序数列中,查找特定某个数值,并返...

长平狐
2013/01/06
109
0
C语言编程新手入门基础知识学习:程序注释

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
05/15
0
0
(转载)如何学好C语言

keepwalker : 今天晚上我看到这篇文章。 http://programmers.stackexchange.com/questions/62502/small-c-projects 我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议...

Lucus_Guo
2015/09/14
87
0
如何学好C语言

有人在酷壳的留言版上询问下面的问题 keepwalker : 今天晚上我看到这篇文章。 http://programmers.stackexchange.com/questions/62502/small-c-projects 我也遇到了和提问的老外一样的问题。...

nothingfinal
2012/06/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

基础编程题目集-7-13 日K蜡烛图

股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:开...

niithub
23分钟前
0
0
Jenkins window 下的安装使用

1.下载:https://jenkins.io/download/ 双击安装完毕,将自动打开浏览器: http://localhost:8080 打开对应位置的文件,将初始密钥粘贴至输入框。 第一个是 安装默认的软件;第二个是 自定义...

狼王黄师傅
25分钟前
1
0
深入解析react关于事件绑定this的四种方式

这篇文章主要介绍了详解react关于事件绑定this的四种方式,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 在react组件中,每个方...

前端攻城小牛
33分钟前
1
0
JS正则表达式

url的正则表达式:包括IP,域名(domain),ftp,二级域名,域名中的文件,域名加上端口!用户名等等信息 `function` `IsURL(str_url) {``var` `strRegex =``"^((https|http|ftp|rtsp|mm...

前端小攻略
37分钟前
1
0
shell习题_2

find /root/ceshi1/ -type f -name "*.txt"|xargs -i mv {} {}.bak find /root/ceshi1/ -type f -name "*.txt" -exec mv {} {}.bak \; 1、批量修改文件名: n1=`echo $f|sed '#.bak##'` [ro......

芬野de博客
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部