我想要一个用户定义的函数,它相当于C中的strlen()函数。在下面的程序中,它与strlen()的功能相同但它有一个限制。如何计算任何长度的文本。
#include <stdio.h>
#include <conio.h>
void main()
{
int len(char *);
char s[20];
int l;
printf("Enter a string: ");
gets(s);
l=len(s);
printf("length of string is =%d",l);
getch();
}
int len(char *t)
{
int count=0;
while(*t!='\0')
{
count++;
t++;
}
return(count);
}
答案 0 :(得分:2)
我认为你的“限制”是因为你在20字节的缓冲区上使用gets()
。由于缓冲区溢出,您将遇到问题。当你这样做时,究竟会发生什么并不是完全可以预测的。
如果您解决了这个问题,我认为您的功能会按照您的预期运行。 (阅读其他人的答案,了解你的长度函数。)
答案 1 :(得分:1)
如果你真的想要“任何长度”,你需要一个任意精度的整数库(如libgmp)作为计数器。但这是非常不合理的,因为字符串必须适合你的记忆,每个角色实际上必须有一个地址。也就是说,适合可寻址空间的任何字符串的长度可以用size_t
(或unsigned long int
类型的变量表示,我想它;它的大小与机器的寄存器大小)。
(请不要问如何形成填充整个可寻址内存的字符串的一个结尾指针。)
答案 2 :(得分:0)
其限制为int
界限。如果你增加它,请使用long
。另外,使其无符号以使最大值加倍。如果您想确保它适合,请使用size_t
(原始strlen
使用)
BTW,永远不要使用gets
。
答案 3 :(得分:0)
你想要的限制是什么?历史上,字符串由'\ 0'终止,因为它是知道字符串结束位置的唯一方法,否则您实际上可以读取整个堆栈或堆栈超过字符串的真实长度。其他函数用于标识字符串结尾的方法,以防止崩溃而不是功能是在查找字符集外的值时停止读取。
修改强> 显然我误解了这个问题。
答案 4 :(得分:-1)
int main(){
int Length = 0;
char StrArray[10] = "Hello";
while (StrArray[Length] != '\0')
{
StrArray[Length];
Length++;
}
std::cout << Length;
std::cin.get();
}