Chinaunix

标题: g++ 4.2: deprecated conversion from string constant to 'char*' [打印本页]

作者: caijimin    时间: 2008-04-07 16:31
标题: g++ 4.2: deprecated conversion from string constant to 'char*'

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char *t = "Hello world!";
  5.         printf("%s\n",t);
  6.         return 0;
  7. }



  8. # g++ a.c
  9. a.c: In function 'int main()':
  10. a.c:5: warning: deprecated conversion from string constant to 'char*'
复制代码


改为const char *就没有warning, 问题是程序里有上千处类似的地方,有没有哪个编译选项可以不看到这些讨厌的warning
用gcc编译是没有warning的
作者: net_robber    时间: 2008-04-07 16:34
原帖由 caijimin 于 2008-4-7 16:31 发表

#include

int main()
{
        char *t = "Hello world!";
        printf("%s\n",t);
        return 0;
}



# g++ a.c
a.c: In function 'int main()':
a.c:5: warning: deprecated conv ...




#include <stdio.h>

int main()
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *a= "Hello world!";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *t = (char*)a;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%s\n",t);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}

作者: caijimin    时间: 2008-04-07 17:01
标题: 回复 #2 net_robber 的帖子
如果只有1、2个地方,怎么改都可以。 关键就是我的程序里有上千个类似的地方,那么多warning看起来很不爽
作者: mymtom    时间: 2008-04-07 18:09
原帖由 caijimin 于 2008-4-7 16:31 发表

#include

int main()
{
        char *t = "Hello world!";
        printf("%s\n",t);
        return 0;
}



# g++ a.c
a.c: In function 'int main()':
a.c:5: warning: deprecated conversion from string constant to 'char*'


这样写本来就可能出问题:
char *t = "Hello world!";
改为:
const char *t = "Hello world!";
是正道.
这样可以防止:
t[2] = 'H';
或者:
strcpy(t, "World");
之类的错误.
作者: MiracleNo1    时间: 2008-10-30 09:35
现在,告诉别人要我要消掉所有警告, 别人都会觉得不可思议.  我手里的代码, 在编译时警告数屏.
作者: Godbach    时间: 2008-10-30 09:37
呵呵,这个如果用GCC编译好像没有问题吧
作者: nicozhou    时间: 2008-10-30 10:26
原帖由 MiracleNo1 于 2008-10-30 09:35 发表
现在,告诉别人要我要消掉所有警告, 别人都会觉得不可思议.  我手里的代码, 在编译时警告数屏.



你还是慢慢去掉所有的告警吧,这会花的时间远远少于以后定位一些莫名其妙的问题的时间.

用lint也是不错的。
作者: nicozhou    时间: 2008-10-30 10:27
原帖由 mymtom 于 2008-4-7 18:09 发表


这样写本来就可能出问题:
char *t = "Hello world!";
改为:
const char *t = "Hello world!";
是正道.
这样可以防止:
t[2] = 'H';
或者:
strcpy(t, "World");
之类的错误.


就是,人家出这个告警就是在提醒这些潜在的错误。
作者: sjtlqy    时间: 2010-10-15 14:42
到底会出现什么错误,让我试验一下阿
作者: pengjianbokobe    时间: 2010-10-15 18:50
net_robber 发表于 2008-04-07 16:34



   这个跟楼主的有什么区别?
作者: juncker    时间: 2010-10-16 00:03
这样做理论上会有问题,但实际上很多老点的代码有这样写,我个人观察4.1x之前版本的gcc编译这个都不会有警告,但较新版本的编译就会出现这种警告
作者: lemoncookie    时间: 2010-10-17 00:08
回复 1# caijimin


    如果是在不想看warning
    用g++ -w 编译
作者: cyberexp    时间: 2011-01-17 11:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: rain_fish    时间: 2011-01-17 11:35
不要否定编译器
作者: MaxWu    时间: 2011-03-23 18:06
建议试试: #pragma GCC diagnostic ignored "-Wwrite-strings"




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2