C,在大小为 15 的无符号整数数组的空间中存储长度 <=60 的字符串

标签 c arrays string ext2

这个问题让我很困惑-

我有一个数组(固定大小):

unsigned int i_block[15];

我有一个字符串(长度 <= 60):

"path/to/bla/is/bla"

我如何将字符串的字符存储在数组的空间中? 我正在考虑也许使用 memset,但我不知道这是否可行?

供引用: "如果文件的数据适合分配给数据指针的空间,则可以方便地使用该空间。例如,如果数据不超过 60 字节,ext2 将以这种方式存储符号链接(symbolic link)(通常是文件名)的数据(“快速符号链接(symbolic link)”)。”

来自

Source

最佳答案

此代码假定 int 类型使用 4 个字节,因此 15 int 使用 60 个字节。

你可以这样存储字符串:

size_t len = strlen(str);
if (len <= sizeof i_block) {
    memset(i_block, 0, sizeof i_block);
    memcpy(i_block, str, len);
}

数组应该用 '\0' 填充以保持整洁并提供一种判断字符串长度的方法。上面的代码简单易读。您可以复制该字符串,并将缓冲区的剩余部分设置为 0,并稍微降低对 memset 的可读性调用。

请注意,如果字符串长度为 60,则数组末尾将没有尾随 '\0'。应仔细检索字符串以解决此限制。

关于C,在大小为 15 的无符号整数数组的空间中存储长度 <=60 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38702702/

相关文章:

c - 用 scanf 读取 int 直到换行

c++ - C 和 C++ : data file with error "Expected unqualified-id"

c - &((struct name *)NULL -> b) 是否会导致 C11 中的未定义行为?

c - X11模态对话框

arrays - 通过索引拒绝 Ruby 数组元素的惯用方法

java - 在一个整数后跟一个空格拆分一个字符串

c - 如何跟踪二分搜索算法中的最后一个索引?

arrays - 循环遍历node/jade中的相似键

c - 在C语言中,我如何c写一个函数来打开一个csv文件并将值读入数组?

c - 使用 Switch case 删除 C 中字符串中的标点符号