c - 如何将字符串类型转换为具有不同大小的 char 数组成员的结构?

标签 c string struct

如何将字符串类型转换为具有不同大小的 char 数组成员的结构? 例如

typedef struct format{
    char test1[12];
    char test2[3];
    char test3[3];
    char test4[3];
    char test5[9];
    char test6[3];
    char test7[3];
    char test8[7];
    char test9[24];
    char test10[3];
    char test11[24];    
}format;

现在我将有一个字符串,它将与上述信息连接起来,我只想解析其中的相应信息并将其填充到相应的结构成员中。

最佳答案

你的理由是什么?您也许可以逃脱:

如果C:

// s is a null-terminated c string.
format* f = (format*)s;

这就是全部内容。

如果是 C++:

// std::string s; // assuming basic_string<char>
// do stuff with s
format* f = reinterpret_cast<format*>(s.c_str());

前提是该字符串位于范围内。这可能存在风险,具体取决于您的 STL 实现。

对于 C++ 和 C:如果您的字符串切片不是以零结尾并且您在格式的成员上调用标准 C 样式字符串函数,那么您还会面临读取超出每个字符串范围的风险结构体。

正如 undur_gongor 和 glglgl 所指出的,如果结构内的 char 数组的对齐和填充导致非紧密包装的结构(即由于对齐规则而存在额外的填充),则这可能不起作用。

正如 Steve 指出的,在大多数所有架构中,char 是 1 个字节,这意味着您应该是安全的。

关于c - 如何将字符串类型转换为具有不同大小的 char 数组成员的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9990683/

相关文章:

c - ";" block 中的 "if"是什么意思?

c - 使用 stdlib 的 qsort() 对字符串数组进行排序

r - 如何将一列示例 ID 映射到其各自的文件名

c - 如何使用其他动态数组正确声明/初始化/最终化结构的动态数组

c++ - C++函数引用

c - 1's and 0' 到十六进制的数组

c - 在C二叉树中插入函数?

c - 将用户输入放入字符数组(C 编程)

java - 从 url 字符串中检索一些文本并保存到一个单独的字符串

将 typedef 结构从 C 转换为 Pascal