[Warning] ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
时间: 2024-05-12 15:15:18 浏览: 21
这个警告是因为 C++ 中的字符串常量是不可变的,但是当你把一个字符串常量赋值给一个 char* 指针时,编译器会把它视为一个可变的字符串。为了解决这个问题,你应该将 char* 改为 const char*,这样就能避免这个警告。
例如:
```
const char* myString = "Hello, world!";
```
如果你需要修改这个字符串,你可以使用 char[] 数组来存储它,例如:
```
char myString[] = "Hello, world!";
```
这样定义的 char 数组是可变的,你可以对它进行修改。但是你需要注意的是,在使用这种方法时,你需要手动管理内存,确保你不会越界或者泄漏内存。
相关问题
ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
这个错误是因为在使用字符串常量 "abc" 和 "bdc" 时,将其直接赋值给了 char* 类型的 name 变量,这是不被允许的。在 C++ 中,字符串常量是 const char* 类型的,因此将其直接赋值给 char* 类型的变量会导致编译器报错。
要解决这个问题,可以将 char* 类型的 name 变量改为 const char* 类型,或者使用 strcpy 函数将字符串常量复制到动态分配的内存中。例如,可以将 namelist 类的构造函数修改为:
```
namelist(const char *p) {
name = new char[strlen(p) + 1];
if (name != nullptr) {
strcpy(name, p);
}
}
```
同时,在主函数中创建对象时也需要使用 const char* 类型的字符串常量,例如:
```
namelist n1("abc"), n2("bdc");
```
这样就可以避免这个错误了。
iso c++ forbids converting a string constant to 'char*' [-wwrite-strings]
这个错误信息是因为在 C++ 中,字符串常量(例如 "hello")默认是 const char* 类型,不能直接赋值给 char* 类型的变量。因为字符串常量是只读的,如果将其赋值给 char* 类型的变量,就可以通过这个变量修改字符串常量的内容,这是不被允许的。
解决这个问题的方法是将变量的类型改为 const char*,或者使用 strcpy() 函数将字符串常量的值复制到 char* 类型的变量中。