c编程问题:类型冲突,inet_ntop使用,结构体初始化

原文链接: https://bbs.csdn.net/topics/390501095

问题1.类型冲突

错误:与‘getmyip’类型冲突

 static char *getmyip(char *intf_name)

函数没有声明。

定义或声明应该在使用函数之前

问题2.段错误

数组没有初始化

inet_ntop将数值格式(addrptr)转换到表达式(strptr)。inet_ntop函数的strptr参数不可以是一个空指针。

inet_ntop(AF_INET,(struct sockaddr_in *)&addr->sin_addr,ipstring,INET_ADDRSTRLEN);函数声明

char *ipstring;

ipstring = (char *)malloc(INET_ADDRSTRLEN);

或者

char ipstring[INET_ADDRSTRLEN];

如果直接char *ipstring;则会出现段错误。strcpy函数第一个参数也需要初始化

snprintf等函数使用时,参数和占位符匹配,否则发生段错误。

 问题3:指针初始化,和上一个类似

 转自:https://bbs.csdn.net/topics/390501095 

struct image
{
struct header *info;
unsigned char **data;
};
struct image *newimage(int nr,int nc)
{
   struct image  *x;   
   x = (struct image  *) malloc( sizeof (struct image) );
   //这里已经分配过了,为什么还要分别给info和data分配?详细的解释一下。
   x->info = (struct header *)malloc( sizeof(struct header) );
   x->data = (unsigned char **)malloc(sizeof(unsigned char *)*nr); 
   //这里已经给data分配了,为什么还要给data[0]分配,如果需要时不时还要给data[i](i=1,2,3...)
   //分配?再解释一下。
   x->data[0] = (unsigned char *)malloc (nr*nc);
   ......
   return x;
}

 指针只是个指针, 指向的地方需要分配

 

问法好奇怪啊。
x = (struct image  *) malloc( sizeof (struct image) ); 这里已经分配过了,为什么还要分别给info和data分配?详细的解释一下
是给x分配内存 两个指针也就是8个字节的内存,
而struct header *info; header的大小也许是80,你刚分了8个,怎么说也给info分配内存了呢?

 

指针会指向一块内存,指针本身也是要占用内存的。
x = (struct image  *) malloc( sizeof (struct image) );
是给指针成员分配内存。
但指针指向的地方还没有分配内存呢,所以就需要又malloc

你可能感兴趣的:(Linux,C语言)