c - strlen(string) 和 strlen(*string) 之间的区别

标签 c string pointers

假设我有一个大小相同的字符串数组。

char strings[][MAX_LENGTH];

strlen(strings)strlen(*strings) 之间有什么区别?

我知道 strings 本身就是数组中第一个字符串的地址,

但是*strings是什么?

最佳答案

首先,不要这样做。 C 会让你做很多坏主意的事情。这并不意味着你应该这样做。 :)

虽然您可能会收到编译器警告,但这两者实际上是相同的。原因是用这个定义:

char strings[][MAX_LENGTH];

对此的分配最终将成为一个连续的 block 。在该内存块内,没有可用于识别各个字符串开始和结束位置的“结构”或管理设备。这创造了一个有趣的情况。

实际上,*stringstring 都是指向完全相同的内存位置的指针。这意味着对其中任何一个调用 strlen 将返回第一个数组中第一个元素的 null 分隔字符串长度。

但是,我必须重申...不要这样做。

关于c - strlen(string) 和 strlen(*string) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278778/

相关文章:

c - 合并排序不起作用

c# - 来自字节数组的字符串不会在 C# 中被修剪?

c - 将一个 UTF-8 字符推进到下一个

pointers - 原始指针没有产生预期的效果

c++ - 指针运算和继承导致未定义的行为

c - 缓冲区源是否将像素格式更改为 `pix_fmt` 还是仅读取输入,就好像它是该格式一样?

c - fscanf 是否分配内存并在字符串末尾放置一个 NUL 字节?

c# - CSPR 的子字符串也是 CSPR 吗?

c - 当我更改字符数组时链表更改

c - 更好地控制 OpenGL 中的曲面 segmentation ?