已弃用从字符串常量到“char*”的转换:不能使用该常量
Deprecated conversion from string constant to 'char*': Can't use the constant
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", ... };
相关文章:
- 为什么下面带有非常量转换函数的代码没有歧义?
- 如何将变量内容常量转换为 std::array 的大小?
- 将结构C++成员从非常量转换为常量
- 意外 (IMO) 常量转换警告
- 警告:ISO C++禁止将字符串常量转换为'char*' [-Wwrite-strings]
- 为什么无法将常量 X 转换为 X &?
- 重载常量和非常量转换运算符返回数组类型时出现 MSVC 错误 C2593
- 将字符串常量转换为char
- 警告:ISO C++禁止将静态“constexpr char*”数据成员的字符串常量转换为“char*”
- 错误C2662无法从常量转换为引用
- 常量转换运算符的行为
- 如何在 C 中将多字符常量转换为整数
- 从字符串常量转换,c++ 中的指针
- 从字符串常量转换为字符*
- 在这里做常量转换安全吗
- boost序列化错误C4308:负整数常量转换为无符号类型
- 不赞成从字符串常量转换为“char*”[-Wwrite strings]
- C++非常量到常量转换编译错误
- C++-不赞成在第三方标头中从字符串常量转换为“char*”
- 空指针常量转换为右值