C++ 结构中缺少数据

C++ 结构中缺少数据,c++,C++,我不知道为什么结构中缺少单个数据,但其他数据没有,这是您的结构 #pragma pack(push, 1) typedef struct { uint32_t size; u_long crc32; char flags; char filename[MAX_FILENAME_LEN]; } update_file_t; typedef struct {

我不知道为什么结构中缺少单个数据,但其他数据没有,这是您的结构

#pragma pack(push, 1)
typedef struct {
    uint32_t            size;
    u_long              crc32;
    char                flags;
    char                filename[MAX_FILENAME_LEN];
} update_file_t;

typedef struct {
    uint32_t            magic;
    uint32_t            num_files;
    update_file_t       files[MAX_FILES];
} update_into_t;
#pragma pack(pop)

// Reading part
update_info_t *upd = (update_info_t *)chunk.memory; // Downloaded by CURLib
update_file_t *files = &upd->files[0];
files->filename // it's always NULL WHY?
files->crc32    // correct
files->size     // correct
我不知道怎么了,也许是错了? 服务器正确生成文件

    update_file_t       *file;
update_info_t       upd;
char                file_src[256];
update_file_t       *loc_file;

memset(&upd, 0, sizeof(upd));
upd.magic       = magic;
upd.num_files   = 0;

if (!(Out = fopen(output, "wb"))) {
    std::cout << "Couldn't open the output file for writing" << std::endl;
    return 1;
}

for (int c = 0; c < UPD_MAX_FILES; c++) {
    file = &upd.files[c];

    memset(file->filename, 0, sizeof(file->filename));
    file->crc32 = 0;
    file->flags = 0;
}
loc_file    = updgen_file_list;
file        = upd.files;

while (loc_file->filename && loc_file->flags) {
    if (upd.num_files >= UPD_MAX_FILES) {
        std::cout << "UPD_MAX_FILES exceeded!" << std::endl;
        return 1;
    }

    snprintf(file_src, sizeof(file_src),  "%s/%s", path, loc_file->filename);
    if (!(file->size = CRC32FromFile(file_src, &file->crc32))) {
        std::cout << "Couldn't calculate checksum for " << loc_file->filename << std::endl;
        return 1;
    }

    strncpy(file->filename, loc_file->filename, sizeof(loc_file->filename));
    file->flags = loc_file->flags;

    std::cout << "Added file " << file->filename << ", size: " << std::dec << file->size << " bytes, crc32: " << std::hex << file->crc32 << std::dec << std::endl;

    upd.num_files++;
    loc_file++;
    file++;
}
if (fwrite(&upd, sizeof(upd), 1, Out) != 1) {
    std::cout << "Failed writing the update info to the file!" << std::endl;
    return 1;
}
update_file_t*文件;
更新更新信息;
字符文件_src[256];
更新_文件_t*loc_文件;
memset(&upd,0,sizeof(upd));
upd.magic=magic;
upd.num_files=0;
如果(!(Out=fopen(输出,“wb”)){
std::cout文件名);
文件->crc32=0;
文件->标志=0;
}
loc_文件=updgen_文件列表;
file=upd.files;
while(loc_文件->文件名和loc_文件->标志){
如果(upd.num\u文件>=upd\u MAX\u文件){
std::cout size=CRC32FromFile(file_src,&file->crc32))){
std::cout filename,sizeof(loc_file->filename));
文件->标志=定位文件->标志;

std::你怎么检查成员?你说的
文件->文件名
是什么意思?从技术上讲,它不是指针,也不能为
空,但它可以为空。它不可能是
,它不是指针。它在内存中有一个特定的地址。是的,我的错,它是空的,但仍然不知道W所有这些C++和你仍然使用的东西,比如<代码> char(256)
而不是
std::string
?Yikes.溢出漏洞啊哈。你真的有
update\u to\u t
update\u info\u t
?或者你是在给我们一个手写的真实代码的近似值吗?给我们一个很好的答案会很有帮助,这样我们就可以看到真正发生的事情而不用猜测。