我假设它又是一个指针问题,但我想在这里做的是有一个函数搜索内存来查看 IP 地址是否存在,如果不存在,则为它保留一个随机内存空间IP 地址和零被返回。该函数将 IP 地址作为字符串作为第一个参数,第二个参数指向结构。当执行 main() 函数时,result 应该等于 0,result2 应该等于 1,但是我却崩溃了,我认为这与我分配指针的方式有关?
在这个片段中...
ip=(iprec*)p;
我正在尝试设置传递给函数的 iprec 结构(之前由 malloc 分配),但我不确定在该语句的何处添加或删除星号。
这是剩余的代码。
char *shma;
typedef struct{
unsigned char u;
unsigned char a[4];
unsigned int otherdata;
} iprec;
static int loadip(char* remoteip,iprec *ip){
char *p=shma;
int v=0;
char *ep;
unsigned char a[4];
sscanf(remoteip,"%d.%d.%d.%d",a[0],a[1],a[2],a[3]);
int i,n;int sz=5000;
int szr=sizeof(iprec);
for (i=3;i<sz;i+=szr){
ip=(iprec*)p;
if (ip->u=='Y'){
for (n=0;n<=4;n++){
if (a[n]!=ip->a[n]){break;}
}
if (n >= 3){v=1;break;}
}else{
ep=p;
}
p+=szr;
}
if (v==0){
ip=(iprec*)ep;
for (n=0;n<=3;n++){
ip->a[n]=a[n];
}
}
return v;
}
int main(){
char *shma=(char*)malloc(5000); //alloc 5000 bytes for example.
iprec *x=(iprec*)malloc(sizeof(iprec));
int result=loadip("127.0.0.1",x);
int result2=loadip("127.0.0.1",x);
}
最佳答案
替换
sscanf(remoteip,"%d.%d.%d.%d",a[0],a[1],a[2],a[3])
;
与
sscanf(remoteip,"%d.%d.%d.%d",&a[0],&a[1],&a[2],&a[3]);
sccanf
需要指针类型参数。
shma
应该是全局的。
关于c - 从预分配内存中直接读取 C 中的结构失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28446855/