c++ - 如何摆脱 GCC 中的 `deprecated conversion from string constant to ‘char*’ `警告

标签 c++ string gcc

我正在处理一个非常大的代码库,最近升级到 GCC 4.3,现在会触发此警告:

warning: deprecated conversion from string constant to ‘char*’

显然,解决这个问题的正确方法是找到每个声明,如

char *s = "constant string";

或函数调用如:

void foo(char *s);
foo("constant string");

并使它们成为 const char 指针。但是,这意味着至少要接触 564 个文件,这不是我目前希望执行的任务。现在的问题是我正在运行 -Werror ,所以我需要一些方法来扼杀这些警告。我该怎么做?

最佳答案

您将字符串文字 "I am a string literal" 传递到其中的任何函数都应使用 char const * 作为类型,而不是 char*.

如果您要修复某些问题,请正确修复它。

说明:

您不能使用字符串文字来初始化将被修改的字符串,因为它们的类型是 const char*。抛弃常量以稍后修改它们是undefined behaviour ,因此您必须按顺序将 const char* 字符串 char 通过 char 复制到动态分配的 char* 字符串中修改它们。

示例:

#include <iostream>

void print(char* ch);

void print(const char* ch) {
    std::cout<<ch;
}

int main() {
    print("Hello");
    return 0;
}

关于c++ - 如何摆脱 GCC 中的 `deprecated conversion from string constant to ‘char*’ `警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59670/

相关文章:

c++ - ANSI C 等效于 try/catch?

c++ - 带有成员初始化的元组初始化

C# - 从字符串列表中查找和删除子字符串

audio - 对 `jack_client_close` 等的 undefined reference

c - 如何修复对 _imp__* 的 undefined reference ?

c++ - 帮助 GCC 进行自动矢量化

c++ - Visual C++ 静态文本 "&"符号

c++ - 如何从 QtQuickWidget 加载 qt Quick ui 表单?

string - C++ 中最常用的字符串类型是什么以及如何在它们之间进行转换?

javascript - 在 Javascript 中,如何计算字符串中包含 3、4、5 或 6 个字符的单词数?