简单问题,大家看看

pipilang 2005-11-20 07:45:00
目的是想把一个IP形式的字符串,存入一个ip结构里面。
没有做成函数的时候都是好的,但换成函数后输出的结果就不
对了,帮帮看看呀

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

typedef struct IP{
char * field_one;
char * field_two;
char * field_thress;
char * field_four;

}*IPaddress;

IPaddress IPtoStruct(char IPstr[]){
int i=0;
char *str;
char temp[4][4];
IPaddress IPstruct;

IPstruct = (IPaddress)malloc(sizeof(IPaddress));

if(IPstruct==NULL){

printf("Insufficient memory available\n");

}else{

str = strtok(IPstr,".");

strcpy(temp[i],str);

while(str!=NULL){

str=strtok(NULL,".");

if(i<3)strcpy(temp[++i],str);

}

IPstruct->field_one = temp[0];
IPstruct->field_two = temp[1];
IPstruct->field_thress = temp[2];
IPstruct->field_four = temp[3];
}

return IPstruct;
}

void main(){

char p[]="127.0.0.1";


IPaddress g ;

g = (IPaddress)malloc(sizeof(IPaddress));

g = IPtoStruct(p);

printf("%s %s %s %s\n",g->field_one,g->field_two,g->field_thress,g->field_four);


}
...全文
115 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pipilang 2005-11-22
  • 打赏
  • 举报
回复
谢谢咯:)
yuchengliu 2005-11-22
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "conio.h"

typedef struct IP{
char * field_one;
char * field_two;
char * field_thress;
char * field_four;

}IPaddress;

IPaddress IPstruct;

IPaddress IPtoStruct(char IPstr[]){
int i=0;
char *str;
char *temp[4];
// IPaddress IPstruct;

// IPstruct = (IPaddress)malloc(sizeof(IPaddress));

// if(IPstruct==NULL){
//
// printf("Insufficient memory available\n");
//
// }else
{

str = strtok(IPstr,".");

// strcpy(temp[i],str);
temp[i] = str;
while(str!=NULL)
{

str=strtok(NULL,".");

if(i<3)
// strcpy(temp[++i],str);
temp[++i] = str;

}

IPstruct.field_one = temp[0];
IPstruct.field_two = temp[1];
IPstruct.field_thress = temp[2];
IPstruct.field_four = temp[3];
}

return IPstruct;
}

void main(){

char p[]="127.0.0.1";


// IPaddress g ;

// g = (IPaddress)malloc(sizeof(IPaddress));

IPtoStruct(p);

// printf("%s %s %s %s\n",g->field_one,g->field_two,g->field_thress,g->field_four);
printf("%s %s %s %s\n",IPstruct.field_one,IPstruct.field_two,IPstruct.field_thress,IPstruct.field_four);

getch();
}
lovefreex 2005-11-22
  • 打赏
  • 举报
回复
IPstruct->field_one = temp[0];
IPstruct->field_two = temp[1];
IPstruct->field_thress = temp[2];
IPstruct->field_four = temp[3];
这些是把数组的地址给指针变量,而这些地址在你定义二维数组时就分配了,但作用域只是这个函数内,一旦离开函数,地址就变的没有意义了。
关于转换在网络编程中有这样的函数直接转换的,不熟悉,呵呵~~
pipilang 2005-11-20
  • 打赏
  • 举报
回复
还有就是能有什么别的实现方法没有?
比如标准c里面本来的函数:)
更简单高效的也可以:)
pipilang 2005-11-20
  • 打赏
  • 举报
回复
谢谢了,看来基础还是很重要哈~

你能更详细的说,为什么会出现这样的问题吗?
lovefreex 2005-11-20
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "string.h"
#include "stdlib.h"

typedef struct IP{
char * field_one;
char * field_two;
char * field_thress;
char * field_four;

}*IPaddress;

IPaddress IPtoStruct(char IPstr[]){
int i=0;
char *str;
char *temp[4]; //这边用指针数组
IPaddress IPstruct;

IPstruct = (IPaddress)malloc(sizeof(IPaddress));

if(IPstruct==NULL){

printf("Insufficient memory available\n");

}else{

str = strtok(IPstr,".");

temp[i] = str; //存放字符串地址

while(str!=NULL){

str=strtok(NULL,".");

if(i<3)temp[++i] = str;

}

IPstruct->field_one = temp[0];
IPstruct->field_two = temp[1];
IPstruct->field_thress = temp[2];
IPstruct->field_four = temp[3];
}

return IPstruct;
}

void main(){

char p[]="127.0.0.1";


IPaddress g ;

g = (IPaddress)malloc(sizeof(IPaddress));

g = IPtoStruct(p);

printf("%s %s %s %s\n",g->field_one,g->field_two,g->field_thress,g->field_four);


}

70,037

社区成员

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

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