我正在编写一个函数,我需要计算数组的长度:
while(*substring){
substring++;
length++;
}
现在当我退出循环时。该指针是否仍指向数组的开头?例如:
如果数组是“你好”
当我退出循环时,指针指向:
H 还是 NULL?
如果它指向NULL,我如何让它指向H?
我正在编写一个函数,我需要计算数组的长度:
while(*substring){
substring++;
length++;
}
现在当我退出循环时。该指针是否仍指向数组的开头?例如:
如果数组是“你好”
当我退出循环时,指针指向:
H 还是 NULL?
如果它指向NULL,我如何让它指向H?
C 中的字符串以空字符(表示为\0
)结尾存储。
因此,可以如下声明一个字符串。
char *str="Hello!";
在内存中,这看起来像Hello!0
(或者更确切地说,对应于每个字母后跟零的一串数字)。
您的代码如下所示:
substring=str;
length=0;
while(*substring){
substring++;
length++;
}
当你到达这个循环的末尾时,*substring
将等于0
并substring
包含0
上面提到的字符的地址。除非您明确这样做,否则的值substring
不会改变。
要使其指向字符串的开头,您可以使用substring-length
,因为指针是整数并且可以这样操作。或者,您可以在开始之前记住该位置:
beginning=str;
substring=str;
length=0;
while(*substring){
substring++;
length++;
}
substring=beginning;
它指向数组的 NULL 终止符。只需记住另一个变量中的位置,或从指针中减去长度。
指针一旦移动将不会自动移动到任何其他位置。因此,一旦 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);
}
希望这可以帮助...
在循环结束时,*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 位)。