问题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:结构体初始化,和上一个类似
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;
}
指针只是个指针, 指向的地方需要分配
问题4:数组初始化为1
int ary[10]={1};//这样的结果是a[0]=1;而a[1]~a[9]都是默认值。
int ary[10]={0};//是可以的
memset(ary,1,sizeof(int)*10);//不行,1的BCD码是31个0,一个1,按一个字节赋值,再组成4字节的int型读取出来,是错误的