C语言编译时产生的警告:initializing ‘char *‘ with an expression of type ‘const char *‘ discards qualifiers
警告的产生:
char *my_strstr(const char *str1,const char *str2)
{const char *s1 = NULL;const char *s2 = NULL;char *cp = str1;while (*cp){s1 = cp;s2 = str2;while (s1 && s2 && (*s1 == *s2)){s1++;s2++;}if (*s2 == '\0'){return cp;}cp++;}return NULL;
}
编译时产生如下警告信息
9.7查找_strstr.c:37:11: warning: initializing 'char *' with an expression of type 'const char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]char *cp = str1;^ ~~~~
1 warning generated.
警告信息的翻译是:
使用“const char*”类型的表达式初始化“char*”将丢弃限定符[-Wincompatible指针类型丢弃限定符]
警告信息产生的原因:
警告信息的解读:
是由于使用“const char*”类型的表达式初始化“char*”将丢弃限定符
在代码中:
char *my_strstr(const char *str1,const char *str2)
char *cp = str1;
警告是由于第2行的语句产生的,
因为在形参中的参数由const所修饰,而在将被const修饰的类型赋值给没有const修饰的类型时发生了警告
指针赋值时,左侧的操作数必须具有右侧操作数的全部限定修饰
如下面的例子
int main(void)
{int *a = NULL;const int *pa = a;return 0;
}
这个代码可以成功编译通过。因为赋值语句的左侧操作数具有右侧操作数的全部限定修饰符
而如下代码在编译的时候就会发生警告
int main(void)
{const int *a = NULL;int *pa = a;return 0;
}//如下是警告信息
test_2.c:6:10: warning: initializing 'int *' with an expression of type 'const int *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]int *pa = a;^ ~
1 warning generated.
因为赋值语句的左侧操作数没有右侧操作数的const限定修饰符,因此发生警告
解决方法
赋值操作符的两个操作数具有相同的限定修饰(取消const修饰,或两侧都加上const修饰)
char *my_strstr(const char *str1,const char *str2)
const char *cp = str1;
进行强制类型转换
char *my_strstr(const char *str1,const char *str2)
char *cp = (char *)str1;
C语言编译时产生的警告:initializing ‘char *‘ with an expression of type ‘const char *‘ discards qualifiers相关推荐
- 【错误记录】Android 编译时技术版本警告 ( 注解处理器与主应用支持的 Java 版本不匹配 )
文章目录 一.报错信息 二.问题分析 三.解决方案 一.报错信息 在使用 Android 编译时技术 , 涉及 编译时注解 , 注解处理器 ; 开发注解处理器后 , 编译报如下警告 ; 该警告不会影响 ...
- c语言编译时检查逻辑错误吗,C语言陷阱与技巧20节,自定义“编译时”assert方法,在代码编译阶段检查“逻辑”错误...
在C语言程序开发中,程序员写代码时应该考虑的"面面俱到",这样才能写出功能稳定的程序.例如,在实现 open() 函数时,先完成它的功能固然是重要的,但是程序员还需要考虑各种&qu ...
- c语言编译说文件不存在,c语言编译时缺少头文件,库的解决办法
问题产生原因 我们都知道我们写一个程序不可能所有东西都重头去开发,因此我们会使用一些其它人写好的文件或者说叫做库函数等.但是有时候因为路径的设置不对,或者是文件的丢失,或者是文件版本不对,或者是文件的 ...
- 【开发日常】【Makefile】编译时如何将警告(warning)视为错误(error)?
我们有时会遇到内核编译时警告(warning)被视为错误(error)等问题 在内核源码中,移植外部驱动模块,出现报错: error: unused variable 'xxx' [-Werror=u ...
- c语言缺少函数头怎么办,c语言编译时如何解决缺少头文件和库的问题
问题原因: 我们都知道我们写一个程序不可能所有东西都重头去开发,因此我们会使用一些其它人写好的文件或者说叫做库函数等.但是有时候因为路径的设置不对,或者是文件的丢失,或者是文件版本不对,或者是文件的编 ...
- C语言编译时版本号自动加一,VC使用编译时间作为版本号标识的方法
常用方法分两步: 1. 得到编译时间: 2. 设置基准时间,以编译时间距基准时间的总天数的2倍作为版本号,适当情况还可加上初值: 其中第一步实现有两种方法: 1. 直接使用系统宏:CString Oc ...
- c语言编译时字符黑色,C语言黑与白问题
问题描述 有A.B.C.D.E这5个人,每个人额头上都帖了一张黑或白的纸.5人对坐,每 个人都可以看到其他人额头上纸的颜色.5人相互观察后: A说:"我看见有3人额头上贴的是白纸,1人额头上 ...
- C语言编译时无法打开文件,在VS2010下编译无法打开包括文件:“GL/glaux.h”: No such file or director...
最近测试了一个OpenGL的示例程序: #include #include #include "glos.h" void main(void) { auxInitDisplayMo ...
- C语言编译时无法打开文件,2812c语言编译时头文件无法打开
引用:louiewong 写道: 全部错误显示如下: ------------------------------ pmsm.pjt - Debug ----------------------- ...
最新文章
- TensorRT PoolingLayer
- muduo之mutex和condition
- 【视频课】如何掌握好深度学习之视频分类与行为识别?这一门课足矣!
- Angular应用里的Template Reference变量
- Tushare在R中的使用
- 谈判失败:Oracle 杀死 Java EE
- 不在gopath目录下能使用godoc吗_一文搞懂 Go Modules 前世今生及入门使用
- STM32启动代码概述
- GROUP BY中ROLLUP/CUBE/GROUPING/GROUPING SETS使用示例
- 编程珠玑java_编程珠玑第八章
- linux查看redis安装目录
- 西部数据移动硬盘哪个型号好_西部数据移动硬盘怎么样(西数移动硬盘系列区别)...
- CODOSYS之结构化文本(ST)—— 初级篇(二)简介与基本概念
- IAR for ARM系列教程(三)_菜单(Ⅰ)
- 求[X,Y]内被除3余1并且被除5余3的整数的和
- oc错误:control reaches end of non-void function
- every()数组方法
- 骚操作!代码写情诗 | 程序员有话说
- linux卸载nps,CentOS安装nps
- UCOS操作系统——信号量与互斥信号量(九)