iCAx开思工具箱

标题: ug里传二维数组怎么传好阿 [打印本页]

作者: Tyrael    时间: 2004-4-20 17:25
标题: ug里传二维数组怎么传好阿
比如要传多个字符串给一个API函数
这些字符串存在二维字符数组中char string[50][50]
函数形参是char * *
实参应该怎么写呢?
用数组名string不行
作者: zzz    时间: 2004-4-20 18:03
解决这个问题最好的方法就是申请动态二维数组。
作者: pinkwall    时间: 2004-4-20 22:45
定义一个一维数组指针 char* str;
  
然后传 [$str]
作者: spline    时间: 2004-4-21 08:39
如果你的数组的大小是固定的,并且数组是静态分配的,是可以传递二维数组名的,这是没有什么问题的。
如果你的C++功底好,可以尝试用STL,STL的平台无关性还不错,这是一个很不错的东西。但是它跨动态库传递数据就要费些工夫。
作者: Tyrael    时间: 2004-4-21 09:00
嗯,我们最后用的就是zzz斑竹说的
pinkwall兄的意思是不是先定义二维数组string[50][50]
然后char * pstring = string?这样不行吧
spline兄,不知道你有没有试过传递二维数组名?我在vc6中会有如下编译错误:
cannot convert parameter 6 from 'char [500][256]' to 'char ** '
STL我是试过的,但是UG API函数参数通常是char *型,而用string类的c_str()函数返回的是const char *型,不能隐式转换啊
作者: pinkwall    时间: 2004-4-21 13:05
你没理解我的意思
  
首先定义一个一维的  
  
char* str;
  
然后把它的取它的地址作为参数传给api函数
  
比如 uf_xx_xx_xx(xx, xx, xx, [$str)]
  
实际上就是一个二位数组了
作者: zzz    时间: 2004-4-21 14:24
关键还要看这个char **是返回参数,还是输入参数。如果是返回,则要使用&str的形式,否则会出错(这是UG的问题,不是c语言的问题)。如果是输入参数,那么使用&str就有局限了。
作者: goodluckwu    时间: 2004-4-21 15:06
在c中 定义char c[2][5];
c只是一个char*,而不是一个char**。
它实际就是定义了一个c[10]而已。
这一点不知道楼主注意了没有
如果就想定义一个char**,应该这样定义:
char* c[2];
char a[]="abc";
char b[]="defg";
c[0]=a;
c[1]=b;
//这样c才是一个char**;
也可以用new 的方法动态的定义,来取代a,b
作者: Tyrael    时间: 2004-4-21 16:41
pinkwall兄:
正如zzz斑竹所说,你这种方法只适用于string是输出参数,如果你是要传入的话,你当然得自己负责分配空间,而不是仅仅声明一个指针
goodluckwu兄:
这种方法我们也用过,但是如果数组很大的话,就有很多额外的开销
比如char string[500][500],如果要把string传入,还要额外定义一个
char * pstring[500],然后通过循环pstring = string,最后传入pstring
太麻烦了
其实我觉得用STL中的string配合vector是最好的了,就是最后传参数有问题
作者: spline    时间: 2004-4-21 17:30
我在vc6中会有如下编译错误:
cannot convert parameter 6 from 'char [500][256]' to 'char ** '

  
这个当然是错的了。
这样传递,编译器就无法计算地址了。
你的参数类型应该是char [256]类型的,这样,数据类型才一致嘛。
用用typedef
typedef char[256] TMy_str;
TMy_str str[500];
形式参数类型为 TMy_str *
作者: Tyrael    时间: 2004-4-21 20:21
形参不是我决定的阿,是ug的api函数阿
作者: qingwufy    时间: 2004-4-24 08:31
二位数组还是传指针方便些




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3