编译错误deprecated conversion from string constant to 'char*' [-Wwrite-strings]

编程知识 更新时间:2023-05-02 21:18:16

本人在编译一道题的时候遇到了该编译错误:

deprecated conversion from string constant to ‘char*’ [-
Wwrite-strings];(首先用char *定义了函数中的常量)

汉语意思就是不赞成将字符串常量转换为’char*’;

问题是这样产生的,先看这个函数原型:

void someFunc(char *someStr);

再看这个函数调用:

someFunc(“I’m a string!”);

把这两个东西组合起来,用最新的g++编译一下就会得到标题中的警告。

为什么呢?原来char *背后的含义是:给我个字符串,我要修改它(首先应该存在一个字符串其里面应有内容,才可修改)

而理论上,我们传给函数的字面常量是没法被修改的。

诸如:

假定你想使用一个char*类型的变量,有时指向一个字符串,有时指向另外一个字符串。开始的代码就像这样:
char *msg;
msg = “hello”;
msg = “good-bye”;

编译器会对这段代码给出两段警示,说”deprecated conversion from string constant to ‘char *’",意思就是说你没有能力修改字符串的内容。如果将代码写成这样,如:
char *msg = “hello”;
*msg = ‘j’;
printf( “%s\n”, “hello” );

所以说,比较合理的办法是把参数类型修改为const char *。
这个类型说背后的含义是:给我个字符串,我只要读取它。

const:

const(五大内存分区之常量存储区)是一个C语言的关键字,它限定一个变量不允许被改变(正好符合我们的要求)。

这是该题:

PTA 6-8 查找星期 (15分)
本题要求实现函数,可以根据下表查找到星期,返回对应的序号。

序号星期
0Sunday
1Monday
2Tuesday
3Wednesday
4Thursday
5Friday
6Saturday

函数接口定义:

int getindex( char *s );

函数getindex应返回字符串s序号。如果传入的参数s不是一个代表星期的字符串,则返回-1。

裁判测试程序样例:

#include <stdio.h>
#include <string.h>
#define MAXS 80
int getindex( char *s );
int main()
{
int n;
char s[MAXS];
scanf("%s", s);
n = getindex(s);
if ( n==-1 ) printf(“wrong input!\n”);
else printf("%d\n", n);
return 0;
}

/* 你的代码将被嵌在这里 */
本人一开始对a[] 只采用char *定义,但是我们是要保证该常量不被修改,所以应该在其前面再加const以保证其不被修改;
以下为其正确答案

getindex( char *s )
{    
const char *a[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
 for(int i=0;i<7;i++)    
 if(strcmp(s,a[i])==0)  
   return i;   
   return -1;
}

而采用指针访问法也不会出现该编译警告;以下为此答案:

int getindex( char *s )
{
  char *a[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; 
    for(int i=0;i<7;i++)
    if(strcmp(s,*(a+i))==0)
    return i;
    return -1;
}

以上为对常量的初步理解,fighting!!!

更多推荐

编译错误deprecated conversion from string constant to 'char*' [-Wwrite-str

本文发布于:2023-04-28 17:27:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/a52abd2f09d5c2553ff6c1f5262def8b.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   conversion   deprecated   string   strings

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 109323文章数
  • 27734阅读数
  • 0评论数