你能通过对指向字符串的指针数组进行减法来找到字符串的长度吗? 例如,如果我有以下代码
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
是第一个字符串的长度吗?
答案 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]指向的位置。因此,即使减法是合法的(事实并非如此),你的方法也行不通。