我的结果是1,但我输入的字符串长度更长 #包括 整数长度(字符*点) { int n=0; 如果(*点!='\0') { point++; n++; } 返回n; } void main() { int m; 字符*点; char-chars[80]; printf(“请输入字符”); 获取(字符); 点=字符; m=长度(字符); printf(“字符长度为%d.\n”,m); }
我想问为什么不能加上“n”? 我认为问题在于点的使用,但我找不到它。 谢谢 我会在我的结果是1,但我输入的字符串长度更长 #包括 整数长度(字符*点) { int n=0; 如果(*点!='\0') { point++; n++; } 返回n; } void main() { int m; 字符*点; char-chars[80]; printf(“请输入字符”); 获取(字符); 点=字符; m=长度(字符); printf(“字符长度为%d.\n”,m); },c,C,我想问为什么不能加上“n”? 我认为问题在于点的使用,但我找不到它。 谢谢 我会在main中这样使用它: size_t length(const char *point) { size_t n = 0; while (*point != '\0') // Need to loop to iterate through point { point++; n++; } return n; } 您忘记了遍历字符串。
main
中这样使用它:
size_t length(const char *point)
{
size_t n = 0;
while (*point != '\0') // Need to loop to iterate through point
{
point++;
n++;
}
return n;
}
您忘记了遍历字符串。您增加了指针,但仅此而已。另外,我建议使用strlen()
,它完全符合您的意图
使用strlen():
我会在main
中这样使用它:
size_t length(const char *point)
{
size_t n = 0;
while (*point != '\0') // Need to loop to iterate through point
{
point++;
n++;
}
return n;
}
您忘记了遍历字符串。您增加了指针,但仅此而已。另外,我建议使用strlen()
,它完全符合您的意图
使用strlen():
函数中没有循环
length()
。如果,则只计算一次
添加循环语句(或用循环语句替换if
)
int main(void)
{
char chars[80];
printf ("Please enter a chars\n");
scanf("%79s", chars);
size_t m = strlen(chars);
printf("The length of the chars is %zu.\n", m);
return 0;
}
函数中没有循环length()
。如果
,则只计算一次
添加循环语句(或用循环语句替换if
)
int main(void)
{
char chars[80];
printf ("Please enter a chars\n");
scanf("%79s", chars);
size_t m = strlen(chars);
printf("The length of the chars is %zu.\n", m);
return 0;
}
如果您使用内置函数strlen
而不是自定义函数length
?intmain(void)
和返回0
也会更好。@Baddaintmain()
是必须的(几乎),而返回0代码>完全是可选的。:)您可以在此处删除点
变量。它没有任何用途。另外,永远不要使用get
,因为它已被弃用,而且很危险。如果您使用内置函数strlen
而不是自定义函数length
?intmain(void)
和返回0
也会更好。@Baddaintmain()
是必须的(几乎),而返回0代码>完全是可选的。:)您可以在此处删除点
变量。它没有任何用途。另外,永远不要使用get
,因为它已被弃用,而且很危险。另外,我会使用size\u t length(const char*point)
oversize\u t length(char*point)
来表示常量的正确性,因为您没有更改字符。@AndreKampling您是正确的。我只是有点怀疑,是不是要制作一个常量字符串?指向常量字符串的指针:const char*point
=char const*point
。唯一的区别是:char*const point
指针指向非常量char的常量。scanf(“%s”,&chars)代码>→ <代码>扫描频率(“%79s”,字符)代码><代码>%s
需要的是字符*
,而不是字符(*)[80]
是。它是长度说明符,告诉scanf
最多读取79个字符(在本例中为NUL终止符\0
),从而防止缓冲区溢出。我还将使用size\t length(const char*point)
超过size\t length(char*point)
以确保常量的正确性,因为您没有更改字符。@AndreKampling您是对的。我只是有点怀疑,是不是要制作一个常量字符串?指向常量字符串的指针:const char*point
=char const*point
。唯一的区别是:char*const point
指针指向非常量char的常量。scanf(“%s”,&chars)代码>→ <代码>扫描频率(“%79s”,字符)代码><代码>%s
需要的是字符*
,而不是字符(*)[80]
是。它是长度说明符,并告诉scanf
最多读取79个字符(在本例中)字符(+1表示NUL终止符\0
),从而防止缓冲区溢出
/* loop */ {
if (*point!='\0') { /* ... */ }
}