++++参数作为返回值问题++++

kampan 2008-09-17 11:26:20
求如下三个C语言函数,自己写的函数几次调用返回的值都有点问题,晕了!

int FnTest1(char *A,char *B)
int FnTest2(char *A,char **B)
int FnTest3(char *A,char *&B)
A:传入参数,字符串长度不固定(假设是字符串"ABCDEF");B:将A的值加上“GH”返回(需要动态分配和释放内存);函数返回值是B的长度

假设将以上三个函数封装成动态库XYZ.dll,则VC调用的形式,请给列出 ;
实现和调用共3对,每对30分,共90分。谢谢!
...全文
239 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
kampan 2008-09-18
  • 打赏
  • 举报
回复
楼上所言及时
kampan 2008-09-18
  • 打赏
  • 举报
回复
??
mifeixq 2008-09-17
  • 打赏
  • 举报
回复
第三个是C++的引用拉~~我就不太能搞好了,不过引用就是一个别名,你可以按照第一个那样用,好像差不多……
mifeixq 2008-09-17
  • 打赏
  • 举报
回复
第2个^^

#include <stdio.h>
#include <string.h>
int Fntest(char *A, char **B)
{
strcpy(*B,A);
strcat(*B,"GH");
return strlen(*B);
}

int main()
{
char *str="ABCDEF";
char *buf= (char *) malloc(2+sizeof(str)+1);
printf("%d\n", Fntest(str,&buf));
free(buf);
return 0;
}

cwc270 2008-09-17
  • 打赏
  • 举报
回复
int FnTest1(char *A,char *B)
{
B=new char[strlen(A)+3];
strcat(strcpy(B,A),"GH");
return strlen(B);
}
//这种做法是错误的!!!!!
kampan 2008-09-17
  • 打赏
  • 举报
回复
想翻身的咸鱼 给出的代码同样没有释放内存!我主要想看后两种的实现

这两天,弄了一个库,给Delphi调用,总是出现内存错误。
kampan 2008-09-17
  • 打赏
  • 举报
回复
另外,我想明确一下,调用时将B的返回值赋给另一个字符串S
xianyuxiaoqiang 2008-09-17
  • 打赏
  • 举报
回复
#include <stdio.h> 
int FnTest1(char *A,char *B)
{
int len=(int)strlen(A);
for(int i=0;i<len;i++)
{
*B=*A;
A++;
B++;
}
B[0]='g';
B[1]='h';
B[2]='\0';
return len+2;
}

void main()
{
char a[]="abcdef";
int len=(int)strlen(a);
char *b=new char(len+3);
FnTest1(a,b);
printf("%s\n",b);
}
wangdeqie 2008-09-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kampan 的回复:]
可是我没看到内存的释放啊 这样会不会造成内存泄漏啊?
[/Quote]

失误了,没看全要求。。
kampan 2008-09-17
  • 打赏
  • 举报
回复
谢谢 mifeixq ,不过我最想明确的就是后两种,呵呵
OenAuth.Core 2008-09-17
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>

int FnTest1(char *A,char *B)
{
B=new char[strlen(A)+3];
strcat(strcpy(B,A),"GH");
return strlen(B);
}

int FnTest2(char *A,char **B)
{
*B=new char[strlen(A)+3];
strcat(strcpy(*B,A),"GH");
return strlen(*B);
}

int FnTest3(char *A,char *&B)
{
B=new char[strlen(A)+3];
strcat(strcpy(B,A),"GH");
return strlen(B);
}


void main()
{
char* A="ABCDEF";
char* B;
printf("%d\n",FnTest1(A,B));
printf("%d\n",FnTest2(A,&B));
printf("%d\n",FnTest3(A,B));
delete[] B;//加上这个就可以了
}


mifeixq 2008-09-17
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
int Fntest(char *A, char *B)
{
strcpy(B,A);
strcat(B,"GH");
return strlen(B);
}

int main()
{
char *str="ABCDEF";
char *buf= (char *) malloc(2+sizeof(str)+1);
printf("%d\n", Fntest(str,buf));
free(buf);
return 0;
}
~


上个没释放……
mifeixq 2008-09-17
  • 打赏
  • 举报
回复
写了一对,其他类似就能些出来…… 中午吃饭去了……

#include <stdio.h>
#include <string.h>
int Fntest(char *A, char *B)
{
strcpy(B,A);
strcat(B,"GH");
return strlen(B);
}

int main()
{
char *str="ABCDEF";
char *buf= (char *) malloc(2+sizeof(str));
printf("%d\n", Fntest(str,buf));
return 0;
}

~
kampan 2008-09-17
  • 打赏
  • 举报
回复
可是我没看到内存的释放啊 这样会不会造成内存泄漏啊?
wangdeqie 2008-09-17
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>

int FnTest1(char *A,char *B)
{
B=new char[strlen(A)+3];
strcat(strcpy(B,A),"GH");
return strlen(B);
}

int FnTest2(char *A,char **B)
{
*B=new char[strlen(A)+3];
strcat(strcpy(*B,A),"GH");
return strlen(*B);
}

int FnTest3(char *A,char *&B)
{
B=new char[strlen(A)+3];
strcat(strcpy(B,A),"GH");
return strlen(B);
}


void main()
{
char* A="ABCDEF";
char* B;
printf("%d\n",FnTest1(A,B));
printf("%d\n",FnTest2(A,&B));
printf("%d\n",FnTest3(A,B));
}
mifeixq 2008-09-17
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 wangdeqie 的回复:]
C/C++ code//这么写,应该没问题了#include<stdio.h>#include<string.h>#include<malloc.h>intFnTest1(char*A,char*B)
{
B=(char*)malloc(strlen(A)+3);
strcat(strcpy(B,A),"GH");intn=strlen(B);
free(B);returnn;
}intFnTest2(char*A,char**B)
{*B=(char*)malloc(strlen(A)+3);
strcat(strcpy(*B,A),"GH");intn=strlen(*B);
free(*B);returnn;
}intFnTest3(char*A,char*&B)
{
B=(char*)malloc(str…
[/Quote]
这样没有在main里申请一个堆来的好吧?
wangdeqie 2008-09-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 kampan 的回复:]
引用 17 楼 zmlovelx 的回复:
A:传入参数,字符串长度不固定(假设是字符串"ABCDEF");B:将A的值加上“GH”返回(需要动态分配和释放内存);函数返回值是B的长度

如果可以用C++的话,把三个函数封装到一个类中,这样动态分配与释放由类控制.


可否举一例子!!
[/Quote]

C++的话,直接用STL里的string即可
wangdeqie 2008-09-17
  • 打赏
  • 举报
回复

//这么写,应该没问题了
#include <stdio.h>
#include <string.h>
#include <malloc.h>

int FnTest1(char *A,char *B)
{
B=(char*)malloc(strlen(A)+3);
strcat(strcpy(B,A),"GH");
int n=strlen(B);
free(B);
return n;
}

int FnTest2(char *A,char **B)
{
*B=(char*)malloc(strlen(A)+3);
strcat(strcpy(*B,A),"GH");
int n=strlen(*B);
free(*B);
return n;
}

int FnTest3(char *A,char *&B)
{
B=(char*)malloc(strlen(A)+3);
strcat(strcpy(B,A),"GH");
int n=strlen(B);
free(B);
return n;
}


void main()
{
char* A="ABCDEF";
char* B=NULL;
printf("%d\n",FnTest1(A,B));
printf("%d\n",FnTest2(A,&B));
printf("%d\n",FnTest3(A,B));
}
kampan 2008-09-17
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zmlovelx 的回复:]
A:传入参数,字符串长度不固定(假设是字符串"ABCDEF");B:将A的值加上“GH”返回(需要动态分配和释放内存);函数返回值是B的长度

如果可以用C++的话,把三个函数封装到一个类中,这样动态分配与释放由类控制.
[/Quote]

可否举一例子!!
帅得不敢出门 2008-09-17
  • 打赏
  • 举报
回复
A:传入参数,字符串长度不固定(假设是字符串"ABCDEF");B:将A的值加上“GH”返回(需要动态分配和释放内存);函数返回值是B的长度

如果可以用C++的话,把三个函数封装到一个类中,这样动态分配与释放由类控制.
加载更多回复(3)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧