簡體   English   中英

字符串到char *的轉換

[英]string to char* conversion

我在一個代碼庫中,其中有許多函數調用以指針作為參數的函數。 但是,函數調用將“字符串”對象傳遞為指針。 下面的代碼顯示給您一個想法。

#include <vector>
#include <unordered_map>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <string>

using namespace std;

void dum(char *s) {
    printf("%s\n", s);
}

operator char* (string s) {
    return s.c_str();
}

int main(int argc,char *argv[]) {
    string st("Hello world");
    dum(st);
    return 0;
}

我不允許更改所有這些函數或函數調用的語法。 我想出的一種可能的解決方案是添加一個運算符重載,但不幸的是它不起作用,這是g ++(ver 4.7.3)的命令行錯誤: g++ -std=c++11 te2.cc

error: ‘operator char*(std::string)’ must be a nonstatic member function

有任何想法嗎? 謝謝。

更新1

@ferruccio的回答提醒我提到有一些函數調用,例如

dum(dum2());

其中dum2()是一個函數,例如:

string dum2() {
    string s;
    //.....
    return s;
}

因此,如下所示的包裝器不起作用(),編譯器給出了錯誤的, no matching function for call to 'dum(std::string)'

void dum(string &s) {
    dum(s.c_str());
}
operator char* (string s) {
    return s.c_str();
}

這是損壞的(如果允許的話)。 當此函數返回時, s不再存在。 因此,指向其內容的指針毫無用處。

您可以為每個采用char*函數添加一個簡單的函數重載。 例如

void dum(const string& s) {
    dum(s.c_str());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM