簡體   English   中英

將char轉換為std :: string,然后進行串聯

[英]Converting char to std::string, then concatenating

盡管我已經看到許多類似的問題,但是我找不到解決這個特殊問題的方法。

我的問題很簡單,但我完全陷入困境。 我有一個簡單的c ++函數,為此我嘗試了類似的方法

void function1(char* filapp) {
   std::string filapp_2 = "";
   fprintf(stdout, "filapp_2: %s\n", filapp_2.c_str());
   filapp_2  += "A";
   fprintf(stdout, "filapp_2: %s\n", filapp_2.c_str());
   filapp_2  += "B";
   fprintf(stdout, "filapp_2: %s\n", filapp_2.c_str());
   filapp_2  += std::string(filapp);
   fprintf(stdout, "filapp_2: %s\n", filapp_2.c_str());
   filapp_2  += "D";
   fprintf(stdout, "filapp_2: %s\n", filapp_2.c_str());
}

如果輸入值為“ C”,則將打印此代碼

filapp_2:
filapp_2: A
filapp_2: AB
filapp_2: ABC
filapp_2: ABC

我嘗試了許多其他方法,但這基本上始終是結果。 我嘗試過前置,並且會刪除“ AB”。 我不知道為什么。

似乎當filapp連接時,字符串不再是動態的,而是變為常量。 可能與以下事實有關:通過fortran接口調用此函數會限制內存? 界面看起來像

module module_name
    implicit none
    interface
        subroutine function1 (filapp) bind(c)
            use iso_c_binding
            character(kind=c_char) :: filapp(*)
        end subroutine function1
    end interface
end module

編輯:我被要求添加調用函數的fortran部分。 所以我正在做一個巨大的事情,所以一切都非常復雜。 基本上,fortran函數看起來像

call function1(filapp)

filapp被定義為

character(len=fnlen) :: filapp

這與界面本身不同。 我不確定這意味着什么。

std::string構造函數std::string(filapp)要求filapp以null終止。 除非您努力做到這一點,否則Fortran中對該子例程的引用中的實際參數不會為空終止。

考慮例子

use, intrinsic :: iso_c_binding, only : c_char, c_null_char
use module_name

call function1(c_char_'C'//c_null_char)
end

看看沒有附加c_null_char會發生什么。

更一般地,聲明為

character(len=fnlen, kind=c_char) :: filapp

因為長度為fnlen的標量字符可能會作為參數傳遞給假定大小的偽參數,但是您再次需要使它以null終止:

call function1(TRIM(filapp)//c_null_char)

修剪是為了避免在終止之前有尾隨的空白。

或者,通過某種方式在filapp使用空字符。

暫無
暫無

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

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