C++ 警告:不推荐将字符串常量转换为';字符*'';

C++ 警告:不推荐将字符串常量转换为';字符*'';,c++,c,C++,C,我在代码中声明了字符串数组,如下所示 char *arr[] ={ "xyz", "abc", "pqr", NULL }; 编译时收到以下警告 warning: deprecated conversion from string constant to 'char*'' 我知道“xyz”和其他字符串文字是const char,我的数组是char*所以请声明我的数组const char*arr来解析它,但是我失去了将这个数组指向另一个指针的控件。 为了解决上述问题,我们声明了如下数组

我在代码中声明了字符串数组,如下所示

char *arr[] ={ 
"xyz",
"abc",
"pqr",
NULL
};
编译时收到以下警告

warning: deprecated conversion from string constant to 'char*'' 
我知道“xyz”和其他字符串文字是const char,我的数组是char*所以请声明我的数组const char*arr来解析它,但是我失去了将这个数组指向另一个指针的控件。 为了解决上述问题,我们声明了如下数组

 char *arr[] ={ 
    (char *)"xyz",
    (char *)"abc",
    (char *)"pqr",
    NULL
    };
但当需要大数组(大于100个字符串数组)时,这种类型的声明是不公平的。
因此,任何人都可以用另一种方法来解决它。

常量字符*和
常量字符*
之间有区别。如果指针是
常量字符*
,您仍然可以将其指向另一个位置,但不能修改它包含的元素。在这种情况下,正确的解决方案是使数组
const char*

const char*
char*const
之间存在差异。如果指针是
const char*
,则仍然可以将其指向另一个位置,但不能修改它包含的元素。在这种情况下,正确的解决方案是使数组成为
const char*

通过使数组成为
const char*arr[]
不会丢失任何重新指向选项。请注意,
const char*p
(指向不可变
char
的可变指针)和
char*const p
(指向可变
char
的不可变指针)之间存在巨大差异。此代码完全有效:

const char *arr[] = {
  "xyz",
  "abc",
  "pqr",
  NULL
};

arr[1] = "ghi";

将数组设为
常量char*arr[]
不会丢失任何重新指向选项。请注意,
const char*p
(指向不可变
char
的可变指针)和
char*const p
(指向可变
char
的不可变指针)之间存在巨大差异。此代码完全有效:

const char *arr[] = {
  "xyz",
  "abc",
  "pqr",
  NULL
};

arr[1] = "ghi";

字符串文字是常量,因此需要
const
指针来引用它们:

const char *arr[] = {
    // whatever
};

从历史上看,将字符串文字转换为非常量
char*
,与不了解常量
const
的古代代码兼容,是可能的(但危险的)。这种转换已被弃用多年,并最终于2011年从该语言中删除。

字符串文字是常量,因此您需要
const
指针来引用它们:

const char *arr[] = {
    // whatever
};


从历史上看,将字符串文字转换为非常量
char*
,与不了解常量
const
的古代代码兼容,是可能的(但危险的)。这种转换已被弃用多年,并最终在2011年从该语言中删除。

我想第二种转换是指
char*const
。谢谢。不需要修改它,但需要将它指向另一个指针来遍历它。我也尝试过声明const char*,但在我将上述数组的地址分配给另一个指针的第行,它会导致错误。@user3150853是您分配给另一类型的指针吗?例如,如果您试图将此数组指向类型为
char*[]
的数组,您将不会成功。例如,将上述数组分配给另一个char指针,如char*pp=arr。我想您的意思是第二个数组的
char*const
。谢谢。不需要修改它,但需要将它指向另一个指针来遍历它。我也尝试过声明const char*,但在我将上述数组的地址分配给另一个指针的第行,它会导致错误。@user3150853是您分配给另一类型的指针吗?例如,如果您尝试将此数组指向一个类型为C++的代码> char *[]/COD>,您将无法成功。例如,将上面的数组分配给像char *pp= ARR的另一个字符指针。为什么不使用<代码> STD::代码< >代码:STD::String ?错误信息来自C++编译器:这是C中有效的,但不是C++中的。是的STD:字符串是完全有效的,你已经标记了这个C++(这不是C语言),为什么不使用< C++ >代码> STD::String S?错误消息来自C++编译器:这是C中有效的,但不是C++中的。是的,STD:字符串是完全Valdi不认为这个帖子显然是知道代码< > const char */COD>和文字的问题,但是使用这种类型有问题。@ IvayLoStrand Jeve:在这种情况下,解决方案将在很大程度上取决于
const char*
为何存在“问题”;也许应该通过解决这些“问题”来解决,而不是颠覆类型系统。我同意。这个问题没有包含足够的信息来给出完整的答案。我不认为这篇文章解决了OP显然知道
const char*
和文字的问题,但在使用这种类型时有问题。@IvayloStrandjev:如果是这样的话,解决方案将在很大程度上取决于为什么会有“问题”带有
常量字符*
;也许应该通过解决这些“问题”来解决,而不是颠覆类型系统。我同意。这个问题包含的信息不足以给出完整的答案。