[英]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.