如何计算未占满分配空间的字符串实际输入字符数
如何计算C语言中
scanf("%s")实际输入的字符数? 我编写了如下C语言代码:
char* input = malloc(sizeof(char)*100); scanf("%s", input); //假设%s对应的字符数为5
我想计算实际输入的字符数(如示例中的5),尝试使用sizeof()但未找到解决方法。补充说明:input变量最多可容纳100个字符,若输入abcde,仅占用5个字符,其余95个未使用,我需要计算这个5。
嘿,这个问题我之前踩过坑!sizeof()在这里完全帮不上忙——它要么计算的是指针本身的字节大小(比如64位系统里char*是8字节),要是你用的是数组的话就是整个数组的总字节数,根本不是你要的实际输入字符长度。
给你两个实用的解决办法:
用标准库的
strlen()函数:这是最省心的方式,string.h头文件里自带的函数,专门用来统计字符串的有效长度(从开头数到第一个'\0'为止,而scanf("%s")会自动在输入内容末尾加上这个结束符)。用法超简单:#include <string.h> // 先执行你的malloc和scanf代码 int input_len = strlen(input);注意
strlen()返回的是size_t类型,不过只要你的输入长度不超过int的取值范围,存在int变量里完全没问题。手动遍历计数:要是你不想依赖标准库,也可以自己写个小循环来数:
int input_len = 0; while (input[input_len] != '\0') { input_len++; }原理和
strlen()一模一样,就是自己实现了一遍统计逻辑。
最后提个小提醒:用scanf("%s")的时候要小心缓冲区溢出!哪怕你分配了100个字符,用户要是输入超过99个字符(因为要留一个位置放'\0'),就会出问题。建议改成scanf("%99s", input),这样最多读取99个字符,剩下的位置留给结束符,安全性更高。
内容的提问来源于stack exchange,提问作者Anika
相关产品推荐
相关产品推荐

