📌  相关文章
📜  不兼容的指针类型将“string *”(又名“char **”)传递给“const char *”类型的参数;使用 * [-werror,-wincompatible-pointer-types] 取消引用 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:06:12.112000             🧑  作者: Mango

不兼容的指针类型将“string *”(又名“char **”)传递给“const char *”类型的参数;使用 * [-werror,-wincompatible-pointer-types] 取消引用

当你在使用C++程序语言时,你可能会遇到这个错误:“不兼容的指针类型将“string *”(又名“char **”)传递给“const char *”类型的参数;使用 * [-werror,-wincompatible-pointer-types] 取消引用”。这是因为你试图将一个指向字符串的指针(char *)传递给一个需要一个指向常量字符(char const *)的函数。这是被C++编译器认为是不兼容的类型。

解决方案

解决“不兼容的指针类型将“string *”(又名“char **”)传递给“const char *”类型的参数;使用 * [-werror,-wincompatible-pointer-types] 取消引用”错误非常简单,只需将指向字符串的指针声明为const即可。例如:

const char* str = "Hello World!";

这里的“const”关键字表示指向字符串的指针不能修改字符串的内容。这就是C++编译器的要求,因为只有这样才能确保程序的安全性。

代码示例
#include <iostream>

void print_string(const char* str) {
    std::cout << str << std::endl;
}

int main() {
    char* string_ptr = new char[12];
    string_ptr[0] = 'H';
    string_ptr[1] = 'e';
    string_ptr[2] = 'l';
    string_ptr[3] = 'l';
    string_ptr[4] = 'o';
    string_ptr[5] = ' ';
    string_ptr[6] = 'W';
    string_ptr[7] = 'o';
    string_ptr[8] = 'r';
    string_ptr[9] = 'l';
    string_ptr[10] = 'd';
    string_ptr[11] = '\0'; // 不要忘记手动加上字符串的结束字符

    print_string(string_ptr);

    delete[] string_ptr;

    return 0;
}

在上面的示例代码中,我们声明了一个名为“string_ptr”的指向字符的指针。我们手动为其赋值,然后将其传递给我们定义的“print_string”函数。这个函数需要一个指向常量字符(char const *)的指针作为参数,这就是为什么我们需要将“string_ptr”指针声明为const。

总结

“不兼容的指针类型将“string *”(又名“char **”)传递给“const char *”类型的参数;使用 * [-werror,-wincompatible-pointer-types] 取消引用”错误是C++编译器的一个警告。这个错误通常是因为你试图将一个指向字符串的指针传递给需要一个指向常量字符的函数。为了解决这个问题,你只需要在声明指向字符串的指针时加入“const”关键字即可。