fgets()函数输入的长度,以及strlen()函数返回的长度问题
2016-10-25 15:30
441 查看
fgets()函数输入的长度,
以及
strlen()函数返回的长度问题,
在此做下测试(visual studio 2013):
#include<stdio.h.> #include<string.h> int main(void) { char a[6]; printf("input:"); fgets(a, 6, stdin); printf("%s\n", a); printf("strlen() = %d\n", strlen(a)); return 0; }
对于
a[6]我们知道,只能装进
5 个有效字符,因为最后的
\0结束符要占一个。
此例中,当我们输入的字符串的长度小于 6 时,程序运行:
input:123 123 strlen() = 4 请按任意键继续. . .
这里的
123后面为什么多出一行空行,不知道什么原因,有谁能告诉我吗?还有
strlen()函数输出得长度是
4 ,比有效字符多一个,
'\0也算上了?
'\0'被转化为换行
'\n'了?
strlen()会把
'\n'算一个?有点诡异,不确定。
当输入的字符长度为 5 = (6 - 1) 的时候,程序运行:
input:12345 12345 strlen() = 5 请按任意键继续. . .
可见,这里的
strlen()的输出长度为
5 ,其为有效字符串长度。这里和上次的测试不一样,什么原因谁能告诉我呢?
当输入的字符长度为 6 的时候,程序运行:
input:123456 12345 strlen() = 5 请按任意键继续. . .
当输入的字符串长度大于 6 的时候,程序运行:
input:123456789 12345 strlen() = 5 请按任意键继续. . .
书上对
gets()函数是这么说的:
它可以读入包括空格符在内的字符串,用puts()输出时,将
\0转化为换行符,因此
puts()一次输出换一行,不用另外加换行符。
我想对
gets()、
puts()也一样吧。
把上面的程序改成
scanf()输入:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h.> #include<string.h> int main(void) { char a[6]; printf("input:"); //fgets(a, 6, stdin); scanf("%s", a); printf("%s\n", a); printf("strlen() = %d\n", strlen(a)); return 0; }
当输入的字符串小于6的时候,程序运行:
input:12345 12345 strlen() = 5 请按任意键继续. . .
input:123 123 strlen() = 3 请按任意键继续. . .
当输入的字符串长度大于等于6的时候,越界溢出出错,所以 visual studio 一直警告用
scanf_s()函数替换它。
其实本来的`strlen()应该数出的长度是字符串的有效长度,不包括’\0’。
相关文章推荐
- 统计一个长度为2的子字符串在另一个字符串中出现的次数.例如:假定输入的字符串为“asd asasdfg asd as zx67 asd mklo”,子字符串为“as”,函数返回值为6。
- PHP header函数设置http报文头示例详解以及解决http返回头中content-length与Transfer-Encoding: chunked的问题
- 【原】函数返回一个指针以及返回STL对象的问题
- sizeof以及strlen长度问题总结
- C语言strlen()函数:返回字符串的长度
- 问题:求两个字符串的最长公共子串。 要求:输入两个字符串,输出它们的最长公共子串,包括长度。 设计: 设计一个类 String,包括一个 len(字符串长度)和字符串指针 s。另有如下成员函数: ·
- 关于在C/C++语言中,函数如何返回数组,数组如何作为参数传递以及返回数组的函数该如何调用问题的总结
- 写一个返回字符串长度的函数,函数里面不用局部变量,不能调用系统函数strlen
- C程序中,strlen是求取字符串长度,若对整形数组,求取的是什么?还有整形数组作函数参数的问题?
- Ext.Net/ExtJs:关于TextField控件内size、maxLength控制文本框输入字符长度属性失效问题分析以及解决方案
- C语言strlen()函数:返回字符串的长度
- strlen函数的实现 以及出现的问题
- iOS开发问题----去掉输入键盘上的自动联想部分,限制长度内容,以及禁止输入emoji表情等问题
- 今天碰到一个问题,怎么限制用户在固定宽度的input输入框里输入的长度,由此涉猎到了maxlength属性和size属性以及它们的区别。
- strlen() sizeof() lenth()函数的返回值问题
- shell脚本中函数调用的返回值,以及退出状态问题
- shell脚本中函数调用的返回值,以及退出状态问题
- C语言strlen()函数:返回字符串的实际长度
- 加密解密时遇到的"不正确的数据"以及"要解密的数据长度无效"问题解决方案
- 函数返回局部地址的问题