如何在 C++ 中处理 C char* 定义
How to handle C char* defines in C++
我现在正在将一些 C 代码移植到 C++。 C 代码使用多个定义
喜欢:
#define IPADDRESS "fd9e:21a7:a92c:2323::1"
我遇到的问题是,当我使用现在在 C++ 文件中的定义调用 C 函数时,我得到:
warning: ISO C++ forbids converting a string constant to ‘char*’
在这种情况下我不想修改 C 函数,因为我还是 C++ 的新手,我想知道如何处理这个问题。我想不可能告诉 C++ 将这些定义处理为 char*
而不是 string constant
所以我想知道将 string constant
转换为 [= 是否安全12=] 在这种情况下,或者是否有我应该为此使用的功能?
感谢您的帮助!
问题是字符串文字 "this is a string literal"
在 C 中是 char[]
类型,但在 C++ 中是 const char[]
类型。因此,如果您草率地编写了不使用函数参数的 const 正确性的 C 代码,那么当移植到 C++ 时,该代码将会中断。因为您不能将 const char*
传递给需要 char*
.
的函数
不,“丢弃”通常是不安全的const
- 这样做在 C 和 C++ 中都是未定义的行为。
解决办法是修复原来的C代码。不使用 const 正确性是不正确的设计,在 C 和 C++ 中都是如此。如果 C++ 编译器支持复合文字,那么一种可能的修复方法可能是:
#define IPADDRESS (char[]){"fd9e:21a7:a92c:2323::1"}
我现在正在将一些 C 代码移植到 C++。 C 代码使用多个定义 喜欢:
#define IPADDRESS "fd9e:21a7:a92c:2323::1"
我遇到的问题是,当我使用现在在 C++ 文件中的定义调用 C 函数时,我得到:
warning: ISO C++ forbids converting a string constant to ‘char*’
在这种情况下我不想修改 C 函数,因为我还是 C++ 的新手,我想知道如何处理这个问题。我想不可能告诉 C++ 将这些定义处理为 char*
而不是 string constant
所以我想知道将 string constant
转换为 [= 是否安全12=] 在这种情况下,或者是否有我应该为此使用的功能?
感谢您的帮助!
问题是字符串文字 "this is a string literal"
在 C 中是 char[]
类型,但在 C++ 中是 const char[]
类型。因此,如果您草率地编写了不使用函数参数的 const 正确性的 C 代码,那么当移植到 C++ 时,该代码将会中断。因为您不能将 const char*
传递给需要 char*
.
不,“丢弃”通常是不安全的const
- 这样做在 C 和 C++ 中都是未定义的行为。
解决办法是修复原来的C代码。不使用 const 正确性是不正确的设计,在 C 和 C++ 中都是如此。如果 C++ 编译器支持复合文字,那么一种可能的修复方法可能是:
#define IPADDRESS (char[]){"fd9e:21a7:a92c:2323::1"}