C语言大神们,出来活动把这个程序调通,目的是正确从source得到destination_eid,分成eid_scheme和eid_ssp

C语言大神们,出来活动把这个程序调通,目的是正确从source_eid得到destination_eid,分成eid_scheme和eid_ssp,其中eid_ssp是从‘/’符号开始的部分,如何才能编写正确的函数取出这两部分。
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define MAX_LEN 100
typedef struct
{
char* eid_scheme;
char* eid_ssp;
}eid;

void bundle_get_EIDInfo(char eidinfo[],eid* Config_EID)
{
char eid_sch[MAX_LEN] = {""};
char eid_ss[MAX_LEN] = {""};
char* position;

position = strrchr(eidinfo,'/');
strncpy(eid_sch,eidinfo,strlen(eidinfo)-strlen(position) + 1); strcpy(eid_ss,position + 1);
eid_sch[strlen(eidinfo)-strlen(position) + 1] = '\0'; eid_ss[strlen(position)] = '\0';
Config_EID->eid_scheme = eid_sch;
Config_EID->eid_ssp = eid_ss;
printf("%s\n",Config_EID->eid_scheme);
printf("%s\n",Config_EID->eid_ssp);
}
void main()
{
char source_eid[MAX_LEN]={"dtn://mymachine/dtn1"};
eid* destination_eid;

destination_eid = (eid*)malloc(sizeof(eid)); bundle_get_EIDInfo(source_eid,destination_eid);
printf("%s\n",destination_eid->eid_scheme); printf("%s\n",destination_eid->eid_ssp);
free(destination_eid);}

第1个回答  2012-10-27
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define MAX_LEN 100
typedef struct
{
char* eid_scheme;
char* eid_ssp;
}eid;

void bundle_get_EIDInfo(char eidinfo[], eid* Config_EID)
{
char eid_sch[MAX_LEN];
char eid_ss[MAX_LEN];
char* position;

memset(eid_sch, 0, sizeof(eid_sch));
memset(eid_ss, 0, sizeof(eid_ss));

position = strrchr(eidinfo,'/');

strncpy(eid_sch, eidinfo, strlen(eidinfo)-strlen(position) + 1);
strcpy(eid_ss, position + 1);

eid_sch[strlen(eidinfo)-strlen(position) + 1] = '\0';
eid_ss[strlen(position)] = '\0';

//eid_sch和eid_ss 为栈内存, 此函数结束后, eid_sch会被系统回收.
// 所以要用 strdup
Config_EID->eid_scheme = strdup(eid_sch);
Config_EID->eid_ssp = strdup(eid_ss);

printf(" 00 eid_scheme : [%s]\n",Config_EID->eid_scheme);
printf(" 01 eid_ssp : [%s]\n",Config_EID->eid_ssp);
}

int main(int argc, char **argv)
{
char source_eid[MAX_LEN]={"dtn://mymachine/dtn1"};
eid* destination_eid;

destination_eid = (eid*)malloc(sizeof(eid));

memset(destination_eid, 0, sizeof(eid));

bundle_get_EIDInfo(source_eid,destination_eid);
printf(" 02 eid_scheme : [%s]\n",destination_eid->eid_scheme);
printf(" 03 eid_ssp : [%s]\n",destination_eid->eid_ssp);

if( destination_eid->eid_scheme != NULL){
free(destination_eid->eid_scheme);
}

if( destination_eid->eid_ssp != NULL){
free(destination_eid->eid_ssp );
}

free(destination_eid);
return 0;
}
第2个回答  2012-10-24
//帮你改好了,改过的地方都有注释,自己看
//#include "stdafx.h" 这句不要
#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define MAX_LEN 100
typedef struct
{
char eid_scheme[MAX_LEN];//这里不能用指针,不然不能初始化
char eid_ssp[MAX_LEN];
}*peid,eid;//结构体定义一个指针类型,方便使用

void bundle_get_EIDInfo(char eidinfo[],eid *Config_EID)
{
char eid_sch[MAX_LEN] = {""};
char eid_ss[MAX_LEN] = {""};
char* position;

position = strrchr(eidinfo,'/');
strncpy(eid_sch,eidinfo,strlen(eidinfo)-strlen(position));//这里不要加1了
strcpy(eid_ss,position + 1);
eid_sch[strlen(eidinfo)-strlen(position) + 1] = '\0';
eid_ss[strlen(position)+1] = '\0';//这里要加1
strcpy(Config_EID->eid_scheme,eid_sch);
strcpy(Config_EID->eid_ssp,eid_ss);//要这样赋值才能传回数据
//Config_EID->eid_scheme = eid_sch;
//Config_EID->eid_ssp = eid_ss;
//printf("%s\n",Config_EID->eid_scheme);
//printf("%s\n",Config_EID->eid_ssp);
}
void main()
{
char source_eid[MAX_LEN]={"dtn://mymachine/dtn1"};
eid *destination_eid;

destination_eid = (peid)malloc(sizeof(eid));
bundle_get_EIDInfo(source_eid,destination_eid);
printf("eid_scheme=%s\n",destination_eid->eid_scheme);
printf("eid_ssp=%s\n",destination_eid->eid_ssp);
free(destination_eid);
}
第3个回答  2012-10-24
我很疑惑你不是做出来了吗
非要说有问题就是你居然返回了两个局部的自动变量的地址

要么改成static char eid_sch[MAX_LEN];
要么就把结构改成char eid_scheme[MAX_LEN];本回答被网友采纳

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网