0

我正在编写一个函数,我需要计算数组的长度:

while(*substring){
    substring++;
    length++;
}

现在当我退出循环时。该指针是否仍指向数组的开头?例如:

如果数组是“你好”

当我退出循环时,指针指向:

H 还是 NULL?

如果它指向NULL,我如何让它指向H?

4

4 回答 4

1

C 中的字符串以空字符(表示为\0)结尾存储。

因此,可以如下声明一个字符串。

char *str="Hello!";

在内存中,这看起来像Hello!0(或者更确切地说,对应于每个字母后跟零的一串数字)。

您的代码如下所示:

substring=str;
length=0;
while(*substring){
    substring++;
    length++;
}

当你到达这个循环的末尾时,*substring将等于0substring包含0上面提到的字符的地址。除非您明确这样做,否则的值substring不会改变。

要使其指向字符串的开头,您可以使用substring-length,因为指针是整数并且可以这样操作。或者,您可以在开始之前记住该位置:

beginning=str;
substring=str;
length=0;
while(*substring){
    substring++;
    length++;
}
substring=beginning;
于 2013-02-08T05:37:58.043 回答
0

它指向数组的 NULL 终止符。只需记住另一个变量中的位置,或从指针中减去长度。

于 2013-02-08T04:26:03.810 回答
0

指针一旦移动将不会自动移动到任何其他位置。因此,一旦 while 循环越过指针将指向 NULL 或精确地 '\0',这是字符串的终止序列。为了回到字符串的长度,只需计算字符串长度,您已经通过增加长度变量来执行此操作。示例代码:

#include<stdio.h>
int main()
{
  char name1[10] = "test program";
  char *name = '\0';
  name = name1;
  int len = strlen(name);
  while(*name)
  {
    name++;
  }
  name=name-len;
  printf("\n%s\n",name);
}

希望这可以帮助...

于 2013-02-08T05:15:35.427 回答
0

在循环结束时,*substring将是0. 这是循环结束的条件:

while(*substring)

所以while( (the value pointed to by substring) is not equal to 0), do stuff

但随后*substring变为 0(即字符串结尾),因此*substring将指向 NULL。

如果你想把它带回H,做substring - length

但是,您正在编写的函数已经存在。它在string.h里面,它size_t strlen(const char*) size_t是一个指针大小的整数(即 32 位操作系统上的 32 位和 64 位操作系统上的 64 位)。

于 2013-02-08T04:31:34.037 回答