关于Fortran调用C++的函数,函数传参为字符型。 10C

Fortran代码:
program TestFortran

implicit none

call char();

end program TestFortran

!char型
subroutine char ()  
implicit none 
character(3) ::c1
character(3) ::c2

c1 = "1.2"
c2 = "3.4"

call CHARR(c1, c2)

end subroutine char 

end subroutine sub 

C++代码:

//char型
extern "C" void CHARR(char *a, char *b)
{

        return;
}

问题描述:Fortran调用C++中的CHARR函数,传参为字符型变量。
我想要C++得到a == 1.2, b == 3.4.
但是实际发现a的值为1.2 3.4,b的值为3.4

请问怎么解决问题?我想要a的值为Fortran中c1的值,b的值为Fortran中c2的值.图片说明

5个回答

是不是将C1与C2的空间变为4个,就行了。

ttxiaoxitt
ttxiaoxitt 对,我最初c1的空间是4,所以结果为如图的样子。但这不是重点。
一年多之前 回复

如还不行的话,可以如此:
先定义C1为4个或以上的空间。(至少要比实际存储的字符串长度加1个)
然后,先清0,再赋值。如
memset(c1, 0, sizeof(c1)).
c1="1.2"

C2等同处理,即可了。

ttxiaoxitt
ttxiaoxitt 这位老铁,不行啊。我最终c1,c2中要存储的是汉字,而且我不能确定要存储汉字的多少。如果清零再赋值,那么我不能一直使用c1以前的值
一年多之前 回复

诸位请看,如果调用函数的传参为real类型或者integer类型,那么就可以得到单个的值,而不是连续的值
Fortran代码:
!real型
subroutine real ()

implicit none
real ::r1
real ::r2

r1 = 1.0
r2 = 2.0

call REALL(r1, r2)

end subroutine real 

C++代码:
void REALL(float *a, float *b) //a为1.0,b为2.0
{
float c = *a+ *b;
return;
}图片说明
我想要在a,b为字符型的时候,a==1.0 b = 2.0, 请问怎么实现?

zhouya217
zhouya217 这个ab不是float嘛。
一年多之前 回复
ttxiaoxitt
ttxiaoxitt a,b为字符型的时候,当然r1,r2相应的为character类型
一年多之前 回复

不明白你的意思了。

根据你的图片看来,问题就出现在C1,C2两个字符串并没有以0x00结束了,这是肯定了。

我对fortan不熟,但一定要想办法在正常字符串结束处赋一个0x00了。

ttxiaoxitt
ttxiaoxitt 嗯,谢谢。我对Fortran也不太懂。只是项目临时用到了.我再查查资料
一年多之前 回复

后来我在一篇文章中看到,这是因为Fortran的特性造成的,解决办法只能是在C++中在根据Fortran中定义字符型数据的大小去手动截取

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Fortran 调用C 函数
针对于Fortran中有些函数的自动向量化的流水不如C语言好,有些针对于整个Fortran语言的项目中的某个函数需要换成C语言,然后在Fortran中调用相应的C函数。 两种方法都是在Fortran module  文件中调用C函数,并且都要修改相应的Makefile文件,在其中加入相应的CFLAGS。 方法一: 1、直接在Fortran文件调用原Fortran函数之前中声明 externa...
fortran与c混合编程(fortran调用c)
fortran与c混合编程(另一种方法实现了fortran调用c)
怎样在FORTRAN里面调用C写的函数?
怎样在FORTRAN里面调用C写的函数?rn哪位大虾能帮帮忙!!
fortran和c互相调用
integral.f90文件 function integral(func, a, b, step) real(8), external :: func !external不写也可以,不过还是标明一下这是函数 real(8) :: a, b, step, integral real(8) :: x x = a integral ...
fortran 字符型 与 整型 之间的转换【转】
整型->字符型!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!integer          :: intYearcharacter(len=4) :: txtYearintYear = 1998write(txtYear,"(I4)") intYearwrite(*,*) txtYearend!!!!!!!!...
字符型相加的函数
--建测试环境 Create table 表(字段1 varchar(10),字段2 int,字段3 varchar(10)) insert into 表 select 'aa',11,'t' union all select 'bb',22,'t' --建函数 Create funct...
字符型的相关函数
字符型的相关函数 number相关  数值型的相关函数    1)导入math模块(数学模块)   import math   #(导入模块)   -----------   from math import *   #(从math模块导入所有函数)   from math import sqrt,pow,fabs 2)使用math模块   import math   math.sqr...
C++怎样调用Fortran函数
很多网站上给出了这个例子,在下尝试做,未果。求高手指点rn(1) 建立一个Fortran动态库文件,CVF编译器中输入以下的代码:rnrnSUBROUTINE OUTPUT(N)rnrn!下面为对Fortran函数的声明rn!ms$if .not. defined(LINKDIRECT)rn!ms$attributes dllexport :: OUTPUTrn!ms$endif rnrnIMPLICIT NONErnINTEGER NrnrnN=N+10rnWRITE(*,*) "N=",nrnEND SUBROUTINE OUTPUTrnrn编译通过后,将在Fortran工程文件夹的Debug文件夹中生成两个文件,即*.dll文件与*.lib文件。rnrn(2) 新建一个C++ Console项目,并新建一个C++文件,然后输入以下的代码:rn#include rn#include rnrn//声明函数OUTPUT为extern型的,即是从外部调用的。rnextern "C" void _stdcall OUTPUT(int& n);rnrnint main()rnrnint n=3;rnOUTPUT(n);rnrnreturn 0;rnrnrn然后将Fortran编译器生成的两个文件(dll文件与lib文件)复制到C++的当前目录下,并将lib文件加入到当前的C++工程项目中,如下图所示:rn点击菜单“工程-添加工程-Files”,然后选中pp.lib文件即可rnrnrnrn但在C中运行时却rnCompiling...rnCSHOW.CPPrnd:\combine\cshow\cshow.cpp(1) : error C2006: #include expected a filename, found '&'rnd:\combine\cshow\cshow.cpp(2) : error C2006: #include expected a filename, found '&'rnd:\combine\cshow\cshow.cpp(1) : error C2006: #include expected a filename, found '&'rnd:\combine\cshow\cshow.cpp(2) : error C2006: #include expected a filename, found '&'rn执行 cl.exe 时出错.rnrnCSHOW.OBJ - 1 error(s), 0 warning(s)rnrnrnrnrn
字符型数据.c
字符型数据.c 120和121对应的ASCII值为x、y,当输入字符型变量的时候输出x和y,输出整型变量时时120、121 #include<stdio.h> void main(){ char a,b; // a='x'; // b='y'; //两种方式相同,结果都为x,y,120,121 a=120; b=121; printf("%c...
c中调用fortran库
一个fortran在vs2010环境下的hello world例子 一个frotran的lib静态库例子 一个c语言的应用程序,实现在c中显示调用fortran函数的功能 实测可用
Fortran调用C语言小计
先简单记录下问题,以后再给续解决方案 1,关于fortran中module的使用 2,没有参数可以正常调用,当需要传递参数时,由于两者语言的差异,字符串结束符号不同,应该注意 3,关于调用C函数时,调用的两种方案,一是改Fortran语言增加C接口,第二是更改C语言使得Fortran能够识别 4,调用的本质理解,对编译连接有一定了解后就不用这么麻烦的模仿,比如Fortran编译后使用nm查看会...
关于函数带参数的整型和字符型
'<a class="btn btn-success" onclick="vm.updateCourseclassStudent('+index.studentid+')" > <i class="fa fa-pencil-square-o"></i> 修改</a>'整型直接就是onclick="
VB6.0 为函数创建线程同时给函数传参
'创建线程函数rnPublic Function CreateNewThread(ByVal cFunction As Long, Optional ByVal cPriority As Long = tpNormal, Optional ByVal cEnabled As Boolean = True)rnrnDrawLine函数如下:rnDrawLine(SX, SY, EX, EY, LS)rn以下是调用:rnThreadControl.CreateNewThread AddressOf DrawLine, tpNormal, cEnabledrnrn如何实现为函数创建线程时给函数传参?
字符型数据转换为日期型.rar
字符型数据转换为日期型.rar字符型数据转换为日期型.rar
如何将日期型数据转换为字符型?
rn 向大家请教,如何将日期型数据转换为字符型?rnrn即:比如我用 aa=now() 获取了当前时间,然后我想用这个时间转换成字符型的数据,作为另一个字段所用,同时要去掉 时间的连接符.(2006-01-01 09:21:21)------>> 20060101092121rnrn 谢谢!!!!!!!!!!
字符型数据转换为数值型.rar
字符型数据转换为数值型.rar字符型数据转换为数值型.rar
如何将字符型数据转换为日期型?
请教各位高手,在VB中如何将字符型数据转换为日期型?比如:‘20040203’如何转换?
如何转换字符型为CString型?
如何转换字符型为CString型?rn我的程序中有一个字符指针char *p=TEXT("13212232");rn并且还有一个CString型的变量aa,如何将p赋给aa?
C语言关于字符型数据的问题
各位高手,大家好,我在VC++ 6.0里面声明了这样一个变量rnchar m[20]='a','b',"mnopqrst";rnrn但是编译器并不报错,这是为什么,这个声明本质上是对的吗?
关于C语言,字符型的一个小问题
[code=c]#include rnrnint main(void)rnrnrn char ch;rn scanf ("%c",&ch);rn while (ch != 'g')rn rn printf ("%c",ch);rn scanf("%c",&ch);rn rnrn return 0;rn[/code]rnrn这个功能是对输入的字符串取到'g',然后输出。但是我有另一个问题。rnrnC语言中,要输入字符串不是通过字符型数组吗?像 char a[20]; 这种,输出也是用%s。rnrn这个例子为啥用%c也能输入一长串字符?是系统对越界没有判定么?请前辈详解。
浮点型数据转换为字符型
可将浮点型数据转换为字符型,如12.1;可转换为字符型12.1;稳定,逻辑直观
字符型转换成日期型的函数是什么
请指教
可变类型和不可变类型及函数传参
a = 100 b = a print('a:%d'%id(a)) print('b:%d'%id(b)) a = 200 print('a:%d'%id(a)) print(b, "b:%d"%id(b)) # 运行结果 a:1965193792 b:1965193792 a:1965196992 100 b:1965193792 以上内容分为四部分理解: a定义为整数类型变量,不可变. ...
关于字符型格式化!!
string str_date = "20090101";rnrn把它转成“2009-01-01”,注意,不是转成日期型,还是字符型,是什么方法最方便?另外用Replace和Format是否能实现?
EXTJS 调用函数传参问题
[code=JScript]rn//定义树rnvar menuTree = new Ext.tree.TreePanel();rn//添加节点rnmenuTree.root.appendChild(new Ext.tree.TreeNode(rn id:'autoLoadPanel',rn text:'节点1',rn href:"http://www.g.cn",rn listeners:rn 'click':nodeclickrn rn));rn//单击函数rnfunction nodeclick(node,event)rn event.stopEvent();rn var n = contentPanel.getComponent(node.id);rn if (!n) ////判断是否已经打开该面板rn n = contentPanel.add(rn 'id':node.id,rn 'title':node.text,rn closable:true,rn autoLoad:url:"http://www.baidu.com", scripts:true //问题在这rn );rn rn contentPanel.setActiveTab(n); rn;rn[/code]rnrn我想在nodeclick函数中传一个动态的url(url:"http://www.baidu.com");rn我的办法是:在节点中定义一个urls属性,然后在nodeclick中获取,但是获取不到;rn然后在nodeclick中却能获取节点的id,text属性,其它的都不行。请大家指点一下
函数传参(函数作为参数)
题目描述 将数组 arr 中的元素作为调用函数 fn 的参数 示例1 输入 function (greeting, name, punctuation) {return greeting + ', ' + name + (punctuation || '!');}, ['Hello', 'Ellie', '!'] 输出 Hello, Ellie!
【C语言】-- char字符型
    字符型数据类型char(范围是-128-127   unsighed  - 255)(1)   转义字符  ‘\n’  ‘\t’  ’\b’  ’\r’   ’\\’  ‘\ddd(8进制)’  ‘xhh(十六进制)’       (2)非转义字符'A'‘B’ '?'(3)得到键盘输入的字符型  用getchar   例如 ch=getchar();  相当于scanf(“%c”,&amp...
函数传参以及函数的返回值
javascript函数的参数:        1.形式:其中在函数内部的a叫做形参,而调用函数里的100叫做实参 function(在此处传参){} fn1(100); function fn1(a){alert(a)};//可以相当于: fn1(100); function fn1(var a = 100){alert(100)};//但不能这么写        2.也可...
C语言字符型数据
换行符\n hello\nworld      hello                          world 回车符\r hello\rworld      world  把指针移到最开始的位置 退格符\b hello\bworld     hellworld 制表符\t hello\tworld\nhaha\tbao       hello   world
C语言的函数传参汇总
首先一张图可以解决大部分问题: 对于一维数组和二维数组的分析!非常重要 ①一维数组 1:C语言中,当一维数组做函数参数时,编译器总是把它解析成一个指向其首元素的指针。 2:实际传递的数组大小与函数形参指定的数组大小没有关系。 然后举例说明: 下面是一个元素交换函数,把数组array【i】和array【j】交换位置。注意看数组是怎么传递给函数的。 正确的
请问如何在Fortran里面调用C函数??
这是 .c 文件rn——————————————————————————————————rn#include rn#include rn#include rnrnvoid [b]show [/b]()rnrnstruct sysinfo info;rnunsigned long ram_total = 0, ram_used = 0, swap_total = 0, swap_used = 0;rnint mem_unit;rnrnsysinfo(&info);rnrnmem_unit = info->mem_unit;rnrnram_total = info.totalram * mem_unit / 1024000;rnram_used = ram_total - info.freeram * mem_unit / 1024000;rnswap_total = info.totalswap * mem_unit / 1024000;rnswap_used = swap_total - info.freeswap * mem_unit / 1024000;rnrnprintf("系统共有内存%ldMb, 已用%ldMb, 共有交换分区%ldMb, 已用%ldMb\n",rnram_total, ram_used, swap_total, swap_used);rnrnreturn;rnrn——————————————————————————————————————————rnrnrn这是.f90文件rnrnprogram mainrnrn [b] call show()[/b]rnrnend program mainrnrnrn[color=#0000FF][b]请问如何做才能在fotran文件里调用上面.c文件里的show()函数呢???谢谢![/b][/color]
哪儿有C to Fortran 和 Fortran to C 的程序?
哪儿有C to Fortran 和 Fortran to C 的程序?
Fortran To C
请问,有没有在windows环境下的Fortran语言向C语言转化的工具?如果有,在哪里可以下载得到呢?
C语言isspace()函数:判断字符是否为空白字符
头文件:#include 定义函数:int isspace(int c); 函数说明:检查参数c是否为空格字符,也就是判断是否为空格(' ')、定位字符(' \t ')、CR(' \r ')、换行(' \n ')、垂直定位字符(' \v ')或翻页(' \f ')的情况。 返回值:若参数c 为空白字符,则返回非 0,否则返回 0。 附加说明:此为宏定义,非真正函数。
关于C#中调用c++函数传参问题
要在C#中调用这个函数,两个参数分别要传什么类型,怎样写?rnrnint SsmSearchIdleCallOutCh(WORD wSearchMode, DWORD dwSs7LinkSet)rn参数说明:rnwSearchMode 指定搜索的模式,可以是下列比特的操作:rn比 特 描述rnBit0 是否在模拟中继线通道中搜索。=1:是;=0:否rnBit1 是否在SS1通道中搜索。=1:是;=0:否rnBit2 是否在TUP通道中搜索。=1:是;=0:否rnBit3 是否在ISDN通道(用户侧)中搜索。=1:是;=0:否rnBit4 是否在ISDN通道(网络侧)中搜索。=1:是;=0:否rnBit5 是否在ISUP通道中搜索。=1:是;=0:否rnBit6 是否在指定信令链路组的TUP通道中搜索。=1:是;=0:否rnBit7 是否在指定信令链路组的ISUP通道中搜索。=1:是;=0:否rnBit8 是否在SIP类型的IP通道中搜索。=1:是;=0:否rnBit9 是否在H.323类型的IP通道中搜索。=1:是;=0:否rnBit15~Bit10 保留,应设置为0rnrndwSs7LinkSet TUP或ISUP通道:选择信令链路组;rn其它类型通道: 应设置为0,驱动程序按照从wSearchMode的最高位到最低位非零比特的顺序搜索。rn
c语言函数传参
引入: 自定义函数的使用,使整个程序模块化。 每个函数都解决一个小问题,当我们编写好函数后,就把精力转移到,函数之间的逻辑关系上。不必再纠结每一条语句,这样大大提高了编程的效率。 当需要实现相同功能时,可以将函数多次调用,提升代码的复用性。 同时在程序出现问题时,可以快速定位,解决问题。 不过对于函数的参数调用时常会出现问题。 1.使用中出现的两种情况 主函数的值没有被修改(变量...
C语言函数传参
最近在做一些笔试面试之类的题目,今天遇到一个关于C语言函数传参的问题,感觉自己的概念还是有点模糊,本篇文章再学一下关于函数传参。这是遇到的一个题目:(高质量C++编程指南) #include <stdlib.h> #include <stdio.h #include <string.h>void GetMemory(char *p, int num) { p = (char *)malloc
C语言函数传参汇总
关于C语言函数传参现在汇总于下: 数据原型 应用 调用格式 声明格式 int arr[3] 等价传递 foo(arr,3) foo(int *p,int n) int arr[3][4] 等价传递 foo(arr,3) foo(int(*p)[4],int n) int *p 等价传递 foo(p) foo(int*p) int *p
关于int 型与字符型的转换问题
procedure Tlkform.Button1Click(Sender: TObject);rnvar i:integer;rnbeginrn i:=strtoint(edit2.Text);rn edit5.Text:=inttostr(i);rn with adoquery1 dorn close;rn adoquery1.SQL.clear;rn adoquery1.SQL.Add('select jc_id 入库编号,jc_state 进出仓类型,suppy_info.suppy_id 物料代码,suppy_name 物料名称,in_number 进仓数量,suppy_info.suppy_address 仓库名 from jc_details,suppy_info');rn adoquery1.SQL.Add('where jc_id like i');rn adoquery1.Open;rn if adoquery1.RecordCount=0 thenrn beginrn showmessage('该记录不存在');rn end;rnrn我的 jc_id 在数据库里是定义为intrn为什么会出现错误“is not a vaild integer value“
关于字符型与INT型使用的问题?
declare @list varchar(50)rnSet @list='1,2,11'rnselect * from 表 where id in(@list)rnrn系统会报错:"将 varchar 值 '1,2,11' 转换为数据类型为 int 的列时发生语法错误。"rnrn有什么办法可以让这条语法正确执行吗?
相关热词 c# login 居中 c# 考试软件 c# 自然语言分析 c# 分段读取文件 c# 泛型反射 c#打断点 c# 时间转多少秒 c# 线程函数加参数 c# modbus 读取 c#查询集合表