C 将字符指针重置为数组顶部
我正在编写一个函数,需要计算数组的长度:C 将字符指针重置为数组顶部,c,C,我正在编写一个函数,需要计算数组的长度: while(*substring){ substring++; length++; } 现在当我退出循环时。该指针仍将指向数组的开头吗?例如: 如果数组为“Hello” 当我用指针退出循环时: H还是空值 如果它指向NULL,如何使它指向H?它指向数组的NULL终止符。只需记住另一个变量中的位置,或从指针中减去长度。在循环结束时,*子字符串将为0。这是循环结束的条件: while(*substring) 所以while((子字符串指向
while(*substring){
substring++;
length++;
}
现在当我退出循环时。该指针仍将指向数组的开头吗?例如:
如果数组为“Hello”
当我用指针退出循环时:
H还是空值
如果它指向NULL,如何使它指向H?它指向数组的NULL终止符。只需记住另一个变量中的位置,或从指针中减去长度。在循环结束时,
*子字符串将为0
。这是循环结束的条件:
while(*substring)
所以while((子字符串指向的值)不等于0),dostuff
但随后*子字符串
变为0(即字符串末尾),因此*子字符串
将指向NULL
如果要将其返回到H,请执行substring-length
但是,您正在编写的函数已经存在。它在string.h
和size\t strlen(const char*)
size\t
是指针大小的整数(即32位操作系统上的32位和64位操作系统上的64位)。指针一旦移动,将不会自动移动到任何其他位置。因此,一旦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);
}
#包括
int main()
{
char name1[10]=“测试程序”;
字符*名称='\0';
name=name1;
int len=strlen(名称);
while(*名称)
{
name++;
}
name=name len;
printf(“\n%s\n”,名称);
}
希望这有帮助…C中的字符串存储在末尾,并带有一个空字符(表示为\0
)
因此,可以如下声明字符串
char *str="Hello!";
在内存中,这看起来像Hello!0
(或者更确切地说,是一个数字字符串,对应于每个字母后跟一个零)
您的代码如下所示:
substring=str;
length=0;
while(*substring){
substring++;
length++;
}
当您到达此循环的末尾时,*子字符串
将等于0
,子字符串
将包含上述0
字符的地址。除非您明确这样做,子字符串
的值不会更改
要使指针指向字符串的开头,可以使用子字符串长度
,因为指针是整数,可以按整数进行操作。或者,您可以在开始之前记住位置:
beginning=str;
substring=str;
length=0;
while(*substring){
substring++;
length++;
}
substring=beginning;
它没有指向空值;它指向字符串末尾的空终止符。这两者之间有一个微妙但重要的区别。如果要计算字符数组的长度,string.h中的strlen()将执行此函数。