文档章节

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
十一年C/C++编程老手给小白学习C语言的句句肺腑之言,令人深思

我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便...

小辰GG
2017/12/04
0
0
如何学好C和C++

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

zhangyujsj
2015/09/06
24
0
小蚂蚁学习C语言(4)——C语言编程预备知识(下)

接上篇:http://my.oschina.net/woshixiaomayi/blog/537132 11,代码规范化 推荐一本书《高质量C/C++编程》林锐 通俗易懂 简单的记录一下,就是注意缩进,注意换行 老师讲了20分钟,可这些内...

嗜学如命的小蚂蚁
2015/11/30
98
0
Objective-C学习总结——函数与变量的语法特性

Objective-C学习总结——函数与变量的语法特性 Objective-C是一种以C为基础,并集合Smalltalk特征扩展出来的面向对象的语言。在本章节中主要记录总结OC中函数与变量的C语言特性。 全局变量和...

C语言开发
2017/12/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Apache 流框架 Flink,Spark Streaming,Storm对比分析

1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意。Flink是原生的流处理系统,提供high level的API。Flink也提供 API来像Spark一样进行批处理,但两者处理...

hblt-j
6分钟前
0
0
Dubbo/HSF在Service Mesh下的思考和方案

开头 Service Mesh这个“热”词是2016年9月被“造”出来,而今年2018年更是被称为service Mesh的关键之年,各家大公司都希望能在这个思潮下领先一步。今天我也分享阿里中间件在这方面的观点,...

Mr_zebra
7分钟前
0
0
用命令卸载Win8 IE9/IE10/IE11浏览器

首先打开,开始---运行-----框里输入cmd,进入命令提示框,将下面的命令复制粘贴到命令框里,然后按下Enter键执行。 执行完命令,必须重启电脑。 卸载IE9的命令: FORFILES /P %WINDIR%\ser...

JackFace
8分钟前
0
0
2018年产品设计协作领域最强黑马居然是它?

我发了一条朋友圈“感谢池子的秘密法宝,我今天终于吃上了女朋友做的晚饭了”并配上香香的绿豆汤,瞬间获得好几十条评论。 “同为设计师,为啥你会这么早回家?” “快扶我起来,我还能画两个...

mo311
9分钟前
0
0
linux安装jdk1.8(rpm方式)

1:下载JDK的URL地址,例如:http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm。这个地址可以去Orcale的官网找到。通过w......

苏牧影子
14分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部