c - 使用参数在 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};
^~~~~~~~
完成我想做的事情的正确方法是什么
解决方案
您不能从指针初始化数组(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
如果它必须截断字符串,则不会这样做。
推荐阅读
- python - 合并两列并使用熊猫库创建新列
- amazon-web-services - 如何创建 AWS 托管 KMS 密钥
- python - Kubernetes:1 Pod 和 3 Pod 的性能没有区别?
- asp.net-core - 如何使用 SumAsync 计算 Asp.Net 核心中自定义值对象的总和
- node.js - GraphQL 订阅成功握手后收不到消息
- python - 在我没有 root 访问权限的服务器中的 docker 映像中运行 python 代码
- kubernetes - 如何获取 GKE fluentbit 相关错误的详细信息?
- r - R-highcharter中平行图中的颜色y轴
- c++ - 带智能指针的树遍历
- typescript - 如何使 webpack 更喜欢带有扩展名的文件?