我写了这个程序,它接受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(使用前将#替换为@)