怎样使一个函数返回两个字符串值?c++ builder(100分)

  • 主题发起人 主题发起人 netspur
  • 开始时间 开始时间
使用传形参方式
 
#include <stdio.h>
#include <malloc.h>
char ** Ret()
{
static char *lpszTemp[2];
*(lpszTemp) = (char *)malloc(sizeof(char) * 20);
lpszTemp[0] = "First";
lpszTemp[1] = "Second";
return lpszTemp;
}
int main(int argc, _TCHAR* argv[])
{
char **lpszTest;
lpszTest = Ret();
printf("%s/n%s", lpszTest[0], lpszTest[1]);
getchar();
return 0;
}
 
#include <stdio.h>
#include <malloc.h>
char ** Ret()
{
char **lpszTemp;
lpszTemp = (char **)malloc(sizeof(char) * 20);
lpszTemp[0] = "First1";

lpszTemp[1] = "First2";
return lpszTemp;
}
int main(int argc, _TCHAR* argv[])
{
char **lpszTest;
lpszTest = Ret();
printf("%s/n%s", lpszTest[0],lpszTest[1]);
getchar();
return 0;
}
以上两个都可以。
 
yyii的做法是返回一个指针数组而达到目的,如果是需要返回多个值的话,可以考虑用
参数返回,就是说传入需要返回参数的指针,存放返回结果。
long testf(char *a,long *b,FILE *fp)
{
...
strcpy(a,"aaa");
*b = 1;
...
return (0)
}
char a[32];
long b;
FILE *fp;
testf(a,&amp;b,fp);
这样调用函数后,返回的结果就在传入的变量中了。
 
在C++中还可以传递引用:
void GetDateTimeStr(TDateTime Source, AnsiString &amp;DateStr, AnsiString &amp;TimeStr)
{
DateStr = FormatDateTime("yyyy'年'm'月'd'日'", Source);
TimeStr = FormatDateTime("hh'时'm'分'ss'秒'", Source);
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
AnsiString aDate, aTime;
GetDateTimeStr(Now(), aDate, aTime);
ShowMessage(aDate + "," + aTime);
}
 
用Variant类型吧。不过两年没用BCB,不能写出例子。[:(]
 
用结构也可以。
 
Function getstr(var a,b:String):boolean;
begin
result:=false;
a:='aa';
b:='bb';
result:=true;
end;

procedure TFmain.button1click(sender:Tobject);
var
c,d:string;
begin
getstr(c,d);
//c,d就是返回的两个字符串!~
end;
 
呵呵,大家都没看清楚,是函数返回,不是用参数返回。
 
如果函数能返回两个参数,那他怎么用到表达式中?如果是你设计语言你会怎么办?
 
就是使用实参和形参的问题,函数本身也是一个过程;可以修改传进来的参数;
 
使用参数比返回数组指针强些吧!!
 
最省事的办法,返回连个串的连接,中间可以加一个识别字符,虽然这个方法不是一个
标准地解决,却可以简单的解决你的问题,作为一种选择。
 
返回一个字符串数组不就可以了吗?
 
char** CIntegralMoldSet::GetList(short* pnCount)
{
short i;
short nCount = 0;

m_pfileDBMoldSet->Rewind();
for (i=0;
i<m_nMaxMoldSet;
i++)
{
if (m_pfileDBMoldSet->ReadRecord(0, m_szIDMoldSetList, MAX_ID_MOLDSET+1, 0) != FILE_GOOD) break;
if (m_szIDMoldSetList[0] != '/0')
m_pszIDMoldSetList[nCount++] = m_szIDMoldSetList;
}
*pnCount = nCount;
return m_pszIDMoldSetList;
}
 
引用形参。
void getstr( char*&amp;
a, char*&amp;
b)
{
a = "string 1";
b = "string 2";
}
void call()
{
char *a, *b;
getstr( a, b );
}
 
多人接受答案了。
 
后退
顶部