【发布时间】:2021-12-01 09:44:49
【问题描述】:
我正在尝试使用几个变量和 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 数组,但它不喜欢那样。我的目标是让它不再发出这些警告。
【问题讨论】:
-
您可能需要使用空/零名称进行初始化,然后将 strcpy 放入其中,而不是尝试将堆栈分配的 file_name 分配给它...
标签: arrays c struct initialization compound-literals