gpt4 book ai didi

c++ - 将 char 转换为 std::string,然后连接

转载 作者:行者123 更新时间:2023-11-28 04:22:21 25 4
gpt4 key购买 nike

虽然我见过很多类似的问题,但我找不到解决这个问题的方法。

我的问题很简单,但我完全卡住了。我有一个简单的 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 接口(interface)调用此函数有关?界面看起来像

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 中对子例程的引用中的实际参数不会以 null 终止,除非您努力做到这一点。

考虑这个例子

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 中包含空字符。

关于c++ - 将 char 转换为 std::string,然后连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55167723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com