从字符串常量转换为' char *':不能使用常量

时间:2016-02-18 11:36:16

标签: c++ string char deprecated

char *name[]={"Riyaz","Kapil","mayank","Ankur"};

int len=0;
len=strlen(name[1]);
cout<<"\n String 2 is   "; puts(name[1]); cout<<"\n and string 3 is";puts(name[2]);
//exchange now//
char *temp;
temp=name[1];
name[1]=name[2];
name[2]=temp;
len=strlen(name[1]);
cout<<"\nExchanged string is  "; puts(name[1]);
return 0;

如何在此代码中删除&#34;已弃用的字符串常量转换为&#39; char *&#39;&#34; 警告?

我实际上是在指针数组上尝试这个程序,所以考虑到这一点,建议做一些改变。

2 个答案:

答案 0 :(得分:6)

只需将数组声明为

即可
const char *name[]={"Riyaz","Kapil","mayank","Ankur"};
^^^^^

与C ++中的C相反字符串文字具有常量字符数组的类型,表达式中的数组转换为指向其第一个元素的指针。虽然在这两种语言中,字符串文字是不可变的。

相应变量temp也必须声明为

const char *temp;

考虑这些声明

const char *name[]={"Riyaz","Kapil","mayank","Ankur"};

const char * const name[]={"Riyaz","Kapil","mayank","Ankur"};

不同。

第一个数组不是常量数组。它的元素可以更改,您可以在程序中执行此操作。而第二个数组是一个常数数组。它的元素可能不会改变。

至于程序,而不是这段代码

const char *temp;
temp=name[1];
name[1]=name[2];
name[2]=temp;

您可以使用标头std::swap中声明的标准函数<utility>。例如

#include <utility>

//...

std::swap( name[1], name[2] );

答案 1 :(得分:1)

由于您将问题标记为 C ++ (而不是C),您可能希望使用方便的 C ++类来构建字符串数组,例如 {{ 1}}

std::vector<std::string>