簡體   English   中英

如何從 cpp 中的函數以 char* 形式返回字符串?

[英]How can I return string as char* from a function in cpp?

例如,

如果str = "ab"在函數returnString()傳遞

我們有一個函數定義,如

string returnString(string str) 
{
    str+='c';
    return str;
}

輸出:- abc

但如果我們有功能

char* returnString(string str) 
{
    str+='c';
    return str;
}

會給出如下錯誤:

[Error] cannot convert 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'char*' in return***

我該如何解決這個問題?

您可以使用str.data()str.c_str()來獲取指向第一個字符的指針,但永遠不要在函數之外返回它 一旦您的字符串被破壞(仔細看, str是函數堆棧上的本地副本),您就會引發非常迅速的訪問沖突,如果您很幸運的話。

如果您嘗試與 C API 交互,您可以在退出函數之前strdup該指針,但請確保您了解新指針需要在稍后由您free

沒有從std::string類型到char *const char *類型的隱式轉換。

所以編譯器發出錯誤

[Error] cannot convert 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'char*' in return

您可以通過以下方式聲明和定義函數。

const char * returnString( std::string &str ) 
{
    str += 'c';
    return str.c_str();
}

該函數更改傳遞的std::string類型的對象。 std::string類型的引用對象處於活動狀態且未更改時,返回的指針將有效。

否則你需要動態分配一個字符數組。 在這種情況下,函數可以定義為例如

#include <string>
#include <cstring>

char * returnString( const std::string &str ) 
{
    auto n = str.length();

    char *p = new char[ n + 2 ];

    std::memcpy( p, str.c_str(), n );

    p[n] = 'c';
    p[n+1] = '\0';

    return p;
}

當不再需要使用操作符delete []時,您需要記住刪除分配的字符數組。

暫無
暫無

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

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