| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 813 人关注过本帖
标题:关于函数返回指针的问题
取消只看楼主 加入收藏
findugs
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2009-9-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
关于函数返回指针的问题
小弟初学c,想写个函数用来字符数组的累加

代码如下:


程序代码:
#include <stdio.h>
#include <wTypes.h>

typedef struct _MyRecvStr {
  PVOID  Point;
  int  Size;
} MyRecvStr, *PMyRecvStr;

/* str1+str2的返回 */
MyRecvStr *ReturnStr (PVOID str1,int str1len, PVOID str2,int str2len)
{ 
    PVOID str3,ptemp;
    int dizhi,alllen;
    char temp2[10];
    MyRecvStr *fanhui;
    
    alllen=str1len+str2len;
    
    char temp[alllen];
    
    printf("第一个字符: %s.\n",str1);
    printf("第二个字符: %s.\n",str2);
    
    memset(&temp,0,alllen);
    
    ptemp=&temp;    /*获取要存放两个字符数组的起始地址*/
        
    memcpy(&temp,str1,str1len); /*把第一个字符数组保存到temp*/ 
    printf("temp1字符: %s.\n",ptemp);
    dizhi=(int)(ptemp);    /*把temp的地址转换成int型*/ 
     
    dizhi=dizhi+str1len;  /*获取被第一个字符数组占用后,第二个字符数组的起始地址*/
    memcpy((PVOID)dizhi,str2,str2len); /*把第二个字符数组放到temp里*/
   
    printf("temp2字符: %s.\n",&temp);
    printf("字符Size: %d.\n",alllen);
    printf("准备返回temp的指针地址: %d.\n",&temp);
    fanhui->Point=(PVOID)temp;
    fanhui->Size=16;
    
 
    
    return fanhui;
}

int main (int argc, char *argv[])
{ 
    char s1[10];
    char s2[5];
    
    memcpy(s1,"a2s2s2a3s2",10);
    memcpy(s2,"z5x5a",5);

    MyRecvStr Myrecv2;
    
    Myrecv2=*(ReturnStr(&s1,10,s2,5));
    printf("返回指针地址: %d.\n",Myrecv2.Point);
    printf("返回数据大小: %d.\n",Myrecv2.Size);
    
    char wawa[Myrecv2.Size];
    
    memcpy(&wawa,Myrecv2.Point,Myrecv2.Size);
    
    printf("返回数据内容: %s.\n",wawa); 
    
    return 0;
}


返回信息如下:

程序代码:
第一个字符: a2s2s2a3s2箇.
第二个字符: z5x5a胃wK晒wP$=.
temp1字符: a2s2s2a3s2.
temp2字符: a2s2s2a3s2z5x5a.
字符Size: 15.
准备返回temp的指针地址: 2293516.
返回指针地址: 2293516.
返回数据大小: 16.
返回数据内容: ?@.

遇到的问题是:

返回的数据不对?

请各位帮帮忙,谢谢了
搜索更多相关主题的帖子: 函数 指针 
2009-09-24 05:39
findugs
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2009-9-24
收藏
得分:0 
为什么呢,楼上的朋友,能说清楚点吗
2009-09-24 18:19
findugs
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2009-9-24
收藏
得分:0 
论坛无人?
2009-09-24 22:01
findugs
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2009-9-24
收藏
得分:0 
谢谢楼上的朋友,我已经用解决了,下面是我解决的代码,希望给和我遇到一样问题的朋友一个提示

程序代码:
#include <stdio.h> 
#include <wTypes.h> 
 
 
/*copystr1和str2到str3这个地址去*/ 
int addtwostr(char *str1 ,int str1len ,char *str2, int str2len, char *str3) 
{ 
    int dizhi; 
             
    memcpy(str3,str1,str1len); 
    dizhi=0; 
    dizhi=(int)str3+str1len; 
    memcpy((PVOID)dizhi,str2,str2len); 
     
    return 0;    
} 
 
int main (int argc, char *argv[]) 
{ 
 
    int alllen; 
    alllen=100;  
    char *str1=(char *)malloc(alllen); 
    memset(str1,0,alllen); 
    char *str2=(char *)malloc(alllen);  
    memset(str2,0,alllen); 
    char *str3=(char *)malloc(alllen*2);     
    memset(str3,0,alllen); 
         
     
    char *str4=(char *)malloc(alllen);/*分配alllen个char类型的内存空间*/ 
    char *str5=(char *)malloc(alllen);/*分配alllen个char类型的内存空间*/ 
        
    str4="zxzxzxzxz|"; 
    str5="tytytytyt|"; 
     
    memcpy(str1,str4,10); 
    memcpy(str2,str5,10); 
     
    addtwostr(str1,10,str2,10,str3); 
    printf("str3:=%s.\n",str3); 
     
    return 0; 
} 


下面是返回结果:

F:\c>a 
str3:=zxzxzxzxz|tytytytyt|.

2009-09-24 23:14
findugs
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2009-9-24
收藏
得分:0 
感谢jig版主的回复

小弟对指针真的是有点摸不到头,呵呵

第一帖的代码,实际上返回的指针地址和函数里需要返回的字符数组的地址是一个地址,为什么会在main里读返回的地址就没有数据呢?我觉得可能是

在函数里定义的MyRecvStr *fanhui;是私有变量,在return的时候会被消除,所以导致在main里读同样的地址一个有数据一个没有数据

以上仅为个人猜想而已哈,有什么不对,请版主和各位朋友指正哈,学习嘛,呵呵



第二种方法达到目的,用的也是指针,进入函数处理的参数是 在main函数里申请的内存的地址,所以没有问题哈,当然后面处理完,没有free,刚写c几天,还没习惯,感谢版主jig指正。

[ 本帖最后由 findugs 于 2009-9-25 01:38 编辑 ]
2009-09-25 01:31
快速回复:关于函数返回指针的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017976 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved