从“char *”初始化“char”使指针成为整数而不进行强制转换

initialization of ‘char’ from ‘char *’ makes integer from pointer without a cast

我正在尝试使用几个变量和 gcc 匿名创建结构,给定标志 -Werror,不会编译以下内容:

char file_name[A1FS_NAME_MAX];
strcpy(file_name, strrchr(path, '/') + 1);
a1fs_dentry *new_dentry_ptr = (a1fs_dentry *) fs->data_table + last_extent->start * A1FS_BLOCK_SIZE + remaining_directory_entries * sizeof(a1fs_dentry);
*new_dentry_ptr = (a1fs_dentry) {
    .ino = (a1fs_ino_t) fs->first_free_inode_i,
    .name = file_name
};

其中a1fs_dentry定义如下:

typedef struct a1fs_dentry {
    /** Inode number. */
    a1fs_ino_t ino;

    /** File name. A null-terminated string. */
    char name[A1FS_NAME_MAX];

} a1fs_dentry;

导致它失败的警告位于 .name = file_name。它还说 error: missing braces around initializer。我尝试将 file_name 转换为 char 数组,但它不喜欢那样。我的目标是让它不再发出这些警告。

下面语句中复合文字的初始化无效

*new_dentry_ptr = (a1fs_dentry) {
    .ino = (a1fs_ino_t) fs->first_free_inode_i,
    .name = file_name
};

您不能使用表达式 file_name 初始化字符数组 name,当用作初始化程序时,表达式 file_name 会隐式转换为指针,

因此,与其使用复合文字,不如显式地为指针 new_dentry_ptr 指向的对象的数据成员赋值,对于数据成员 name 使用标准字符串函数 strcpy 例如

strcpy( new_dentry_ptr->name, file_name );