你能从指向字符串的数组中找到字符串的长度吗?

时间:2015-09-30 19:37:12

标签: c arrays string

你能通过对指向字符串的指针数组进行减法来找到字符串的长度吗? 例如,如果我有以下代码

char *pStrings[4] = {
    "First string",
    "Hello",
    "Afternoon",
    "Ab"
};

int firstStrLen = pStrings[1] - pStrings[0] - 1; //Will I get the length of the first string by doing this?

firstStrLen是第一个字符串的长度吗?

3 个答案:

答案 0 :(得分:6)

不,这是未定义的行为。

只有当指针指向同一个连续内存块的内存时,才允许它们减去指针。在您的示例中,pStrings[1]pStrings[0]未指向连续的内存块,因此pStrings[1] - pStrings[0]的结果未定义。

  

6.5.6.9:当减去两个指针时,两个指针都指向同一个数组对象的元素,或者指向数组对象的最后一个元素的元素;结果是两个数组元素的下标不同。

答案 1 :(得分:3)

没有。无法保证字符串在内存中彼此相邻。

答案 2 :(得分:1)

这是一个显示@dasblinkenlight和@MByD所说内容的例子。

char*s1 = "Hello";
char *pStrings[4] = {
    "First string",
    "Hello",
    "Afternoon",
    "Ab"
};

在上面的代码中,编译器可能(并且可能会)将s1和pStrings [1]指向同一位置,这可能远离pStrings [0]指向的位置。因此,即使减法是合法的(事实并非如此),你的方法也行不通。