字符串的类型转换

type casting of strings

本文关键字:类型转换 字符串      更新时间:2023-10-16

我正在尝试这段简单的代码来接受一个函数中的字符串并将其传递给另一个函数

#include <iostream>
#include <string>
using namespace std;
void set_name(char *deviceName)
{
    cout<<"Local Device name is:"<<endl;
    cout<<deviceName<<endl;
}
void enter_name()
{
    cout<<"Enter a user friendly name"<<endl;
    string name;
    getline(cin, name);
    cout << "Entered name is:"<<endl;
    cout << name<<endl;
    set_name(name);
}
int main()
{
    enter_name();
    return 0;
}

但是当我编译此代码时,我收到以下错误:

 error C2664: 'set_name' : cannot convert parameter 1 from 'std::string' to 'char *'

有人请帮我解决这个错误,确保我不想更改 set_name(( 的原型;

您的函数set_name正在接受char*参数,而您正在尝试传递std::string如果你的函数参数是一个const char*,它会为你隐式转换:

void set_name(const char* name);
std::string name = "MyName";
set_name(name);

但是,您告诉编译器允许修改此char*,因为它不是const,并且不能修改std::string和字符串文本(双引号内的字符串(。

由于你的函数不会改变deviceName,所以让你的参数成为const char*是最有意义的;然而,让它成为一个std::string更有意义!

void set_name(const std::string& deviceName)
{
    cout<<"Local Device name is:"<<endl;
    cout<<deviceName<<endl;
}

可以这样称为:

// string literal
set_name("MyDeviceName");
const std::string device = "MyDeviceName";
// string
set_name(device);
// char*
char* device = "MyDeviceName"
set_name(device);

但是,如果您确实有理由传递char*并且不打算修改参数,则可以这样调用它:

string name;
...
set_name(&name[0]);