c - 将字符串存储在 char 数组中

标签 c arrays string c-strings

我有一个数组 uint8_t arr[512],我需要在这个数组中存储一个字符串、IP 地址和一个 32 位数字。所以我想到定义另一个字符串数组,如下所示。

uint8_t *ch[] = {
     "abcd",
     "1.1.1.1",
     "123456782341223344445"
};

然后在arr[512] 中执行memcpy。这个可以吗?我想我可能无法从 arr 检索 IP 地址。请有任何其他想法。感谢您的宝贵时间。

最佳答案

如果你想一想指针数组是如何存储在内存中的,你就会明白为什么不能这样做。

您的字符串数组如下所示:

+-------+-------+-------+
| ch[0] | ch[1] | ch[2] |
+-------+-------+-------+
   |       |       |
   |       |       v
   |       |       "abcd"
   |       v
   |       "1.1.1.1"
   v
   "123456782341223344445"

因此,如果您从ch 数组执行memcpy,您只会复制指针,而不是实际的字符串。


当然,您可以将数组中的每个字符串分别复制到目标数组中,但这与分离和不相关的字符串没有什么不同。

关于c - 将字符串存储在 char 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17785646/

相关文章:

c - || 怎么样?工作,在 if(++abc||++xyz) 中,哪一个将得到递增的 abc 或 xyz

c - 生成单词列表时数据输出错误

java - 如何在 Java 中将整数数组相乘

arrays - 如何将 Bluebird Promisification 与生成器 + 并行 Promise 结合使用

Javascript 文件的父文件夹

c - 当c中有多个用户时,如何存储有关用户的两条信息

c++ - 默认情况下,gcc 是否将程序链接到静态库或动态库?

带有 "..."数组的 Java 主要方法?

java - 为什么 `%4.` 在我的号码中添加空格?

C++ 日期解析实现