为什么这个计算字符串长度的 C 程序会给出错误的输出?

2023-12-21

我写了这个程序,它接受string作为输入并返回它的长度。

#include<stdio.h>
#include<string.h>
#define MAX 100

int main()
{
    char a[MAX];
    int len;
    printf("Enter a string: ");
    fgets(a, MAX, stdin);

    len = strlen(a);
    printf("Length of the string = %d", len);

    return 0;
}

由于函数strlen()不计算空字符,即'\0',为什么我的输出总是比输入的字符多1string?

例如 -

Enter a string: Aryan
Length of the string = 6
Process returned 0 (0x0)   execution time: 4.372 s
Press any key to continue.

功能fgets可以将新行字符附加到输入的字符串中'\n'如果提供的数组中有空格。

来自 C 标准(7.21.7.2 fgets 函数)

2 fgets函数读取最多比读取的数量少1 由流指向的流中的 n 指定的字符 s 指向的数组。氮o 在 a 之后读取附加字符 换行符(保留)或在文件结束之后。空值 在读入最后一个字符后立即写入字符 数组

因此在这次呼吁中strlen

len = strlen(a);

新行字符也被计算在内。

您需要将其删除,例如

a[ strcspn( a, "\n" ) ] = '\0';

or

char *p = strchr( a, '\n' );
if ( p != NULL ) *p = '\0';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这个计算字符串长度的 C 程序会给出错误的输出? 的相关文章

随机推荐