我的结果是1,但我输入的字符串长度更长 #包括 整数长度(字符*点) { int n=0; 如果(*点!='\0') { point++; n++; } 返回n; } void main() { int m; 字符*点; char-chars[80]; printf(“请输入字符”); 获取(字符); 点=字符; m=长度(字符); printf(“字符长度为%d.\n”,m); }

我的结果是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; } 您忘记了遍历字符串。

我想问为什么不能加上“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
也会更好。@Badda
intmain()
是必须的(几乎),而
返回0完全是可选的。:)您可以在此处删除
变量。它没有任何用途。另外,永远不要使用
get
,因为它已被弃用,而且很危险。如果您使用内置函数
strlen
而不是自定义函数
length
intmain(void)
返回0
也会更好。@Badda
intmain()
是必须的(几乎),而
返回0完全是可选的。:)您可以在此处删除
变量。它没有任何用途。另外,永远不要使用
get
,因为它已被弃用,而且很危险。另外,我会使用
size\u t length(const char*point)
over
size\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') { /* ... */ }
}