c - 从预分配内存中直接读取 C 中的结构失败

标签 c struct

我假设它又是一个指针问题,但我想在这里做的是有一个函数搜索内存来查看 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);
}

最佳答案

  1. 替换

    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 需要指针类型参数。

  1. shma 应该是全局的。

关于c - 从预分配内存中直接读取 C 中的结构失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28446855/

相关文章:

c - 使用 memcpy 的未对齐访问

c - 将特定库与 gcc 链接

c - sscanf - 多次使用同一个变量

c++ - vector 中的结构成员是否在 C++ 中初始化为零?

Python:struct.unpack 的生成器版本

c++ - windows平台下c++休眠线程100.8564毫秒

c - C 中的 Union 返回类型

arrays - json:无法将数组解码为结构类型的 Go 值

c# - C# 中类与结构的 "Overhead"?

c - 为什么这个结构没有正确对齐?