已弃用从字符串常量到“char*”的转换:不能使用该常量

Deprecated conversion from string constant to 'char*': Can't use the constant

本文关键字:常量 转换 不能 char 字符串      更新时间:2023-10-16
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;

如何删除此代码中的"从字符串常量到'char*'的已弃用转换"警告?

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

只需声明数组,如下所示

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;

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

#include <utility>
//...
std::swap( name[1], name[2] );

由于您将问题标记为C++(而不是 C),因此您可能希望使用方便的C++类来构建字符串数组,例如 std::vector<std::string>

#include <string>  // for std::string
#include <vector>  // for std::vector
// Old C-style:
// const char *name[]={"Riyaz","Kapil","mayank","Ankur"};
//
// C++ style:
std::vector<std::string> names{ "Name1", "Name2", "Name3", ... };