首页 > 解决方案 > 使用参数在 C 中初始化结构

问题描述

(C 相当新)我有一个结构,我正在尝试初始化并填充变量。定义者:(
我无法编辑结构的定义)

typedef struct metadata {
    off_t size;                 
    char name[50];  
} metadata_t;

尝试使用以下定义的函数中的参数初始化“元数据”对象时:

send_metadata(off_t file_size , char* output_file){

    metadata_t meta = {file_size , output_file};
    //send metadata to....

}

但是得到警告:

initialization of ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]
     metadata_t meta = {file_size , name_buf};
                                    ^~~~~~~~

完成我想做的事情的正确方法是什么

标签: cstructcastingwarnings

解决方案


您不能从指针初始化数组(meta = {file_size , output_file};尝试这样做)。

相反,您应该复制字符串值,如下所示:

metadata_t meta;

meta.size = file_size;
strncpy(meta.name, output_file, sizeof(meta.name));
meta.name[sizeof(meta.name) - 1] = '\0';

请注意如何strncpy使用(限制复制到数组的字符数),以及如何将最后一个元素设置为空终止符,因为strncpy如果它必须截断字符串,则不会这样做。


推荐阅读