c语言中测长度的函数,c读入文本后,用strlen函数测不出正确长度

实际上并没有正确把文件中的内容读取到缓冲区中.

首先看你的text声明

char text[]="";

// 实际上这是你只是声明了一个仅包含一个'\0'元素的数组, 注意! C中的数组是不可以自己增长的.

// 这就是你的主要问题所在

char text[] = { '\0' }; // 这个是你声明的另一种写法.

至于你为啥运行没报错呢.看你的while循环

fscanf(fp,"%c",&text);

// 从 fp 文件指针中读取一个字符到 text 中

// 这个语句其实可以拆开为

//

// char buffer;

// fscanf(fp, "%c", &buffer);

//

// 所以你只是单纯把读取的这个字符替换掉了原本的 \0 空字符

test++;

// 这是个计数器吧?不知道是不是你写错了,还是我猜测那样.

printf("%s",text);

// 注意这里

// 你使用 %s 这个格式说明符输出 text 这个字符串.

// 众所周知, 一个字符串是以 \0 作为结束的标志的. 但是你声明的缓冲区只有一个位置,还被读取的字符占住了

// 而 text 是存放在 栈 上面的(至于为啥, 貌似超纲了). 所以 printf 会从 text 的位置开始向后查找

// 直到遇到第一个 \0 字符为止, 或者访问错误出现.

// 而栈的实现依赖于系统实现. 比如 windows 就是直接向后退 0xCC 个字节,并初始化为 0xCCCCCCCC.

// 所以实际上, 如果你的操作系统栈的实现是初始化为 0x00000000 的话, 那就不会出错了.

// 因为你的 text 后一个字节就是 \0 字符. 如果在 Windows 上应该会输出一堆的 烫烫烫 (不知道你懂这个梗不 :) )

bVDOJ1?w=1096&h=572

至于之后的 strlen 的输出也可以同理推导.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值