首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么strlen为浮点数返回不同的长度?

strlen函数是C语言中的一个字符串处理函数,用于计算字符串的长度(即字符个数,不包括字符串末尾的空字符'\0')。它的原型定义在<string.h>头文件中,函数签名如下:

代码语言:txt
复制
size_t strlen(const char *str);

其中,参数str是一个指向以空字符结尾的字符串的指针。函数返回一个size_t类型的值,表示字符串的长度。

然而,根据C语言的规范,strlen函数返回的长度是一个无符号整数(unsigned integer),而不是浮点数。因此,无论输入的字符串是什么,strlen函数都会返回一个整数值。

如果在使用strlen函数时,返回的长度看起来像是浮点数,那可能是因为在打印输出时使用了错误的格式化字符串或者类型转换。例如,如果使用了%f格式化字符串来打印strlen的返回值,就会将其解释为浮点数并打印出来。

正确的做法是使用%zu格式化字符串来打印strlen的返回值,%zu是用于无符号整数的格式化字符串。示例代码如下:

代码语言:txt
复制
#include <stdio.h>
#include <string.h>

int main() {
    const char *str = "Hello, World!";
    size_t len = strlen(str);
    printf("Length: %zu\n", len);
    return 0;
}

输出结果为:

代码语言:txt
复制
Length: 13

在这个例子中,strlen函数返回的长度是13,而不是浮点数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

长度 3 不同回文子序列(计数)

题目 给你一个字符串 s ,返回 s 中 长度 3 不同回文子序列 个数。 即便存在多种方法来构建相同子序列,但相同子序列只计数一次。 回文 是正着读和反着读一样字符串。...示例 1: 输入:s = "aabca" 输出:3 解释:长度 3 3 个回文子序列分别是: - "aba" ("aabca" 子序列) - "aaa" ("aabca" 子序列) - "aca..." ("aabca" 子序列) 示例 2: 输入:s = "adc" 输出:0 解释:"adc" 不存在长度 3 回文子序列。...示例 3: 输入:s = "bbcbaba" 输出:4 解释:长度 3 4 个回文子序列分别是: - "bbb" ("bbcbaba" 子序列) - "bcb" ("bbcbaba" 子序列)...解题 对每个字符左右字符进行计数 遍历中间字符,同时查找左右两侧26个字符是否都存在 两侧都存在则将字符串编码成26进制数存入哈希set,最后返回哈希个数 class Solution { public

92920

奇怪Java题:为什么128 == 128返回false,而127 == 127会返回true?

奇怪Java题:为什么128 == 128返回false,而127 == 127会返回true? 在回答这个问题之前,我们先来看看int和Integer对比,一步步揭开问题答案。...,其内存地址不同 (2) Integer变量和int变量比较时,只要两个变量值是相等,则结果true。...(3) 非new生成Integer变量和new Integer()生成变量比较时,结果false。...为了编程方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java每 一个基本数据类型都引入了对应包装类型(wrapper class),int包装类就是Integer,...加大对简单数字重利用,Java定义在自动装箱时对于值从–128到127之间值,它们被装箱Integer对象后,会存在内存中被重用,始终只存在一个对象。 2.

2.2K31
  • 在Java中为什么不同返回类型不算方法重载?

    doSomething } public void method(Integer id, String name) { // doSomething } } 为什么不同返回类型不算方法重载...从方法签名组成规则我们可以看出,方法返回类型不是方法签名组成部分,所以当同一个类中出现了多个方法名和参数相同,但返回值类型不同方法时,JVM 就没办法通过方法签名来判断到底要调用哪个方法了,如下图所示...: 那为什么返回类型不能做为方法签名一部分呢?...总结 在同一个类中定义了多个同名方法,但每个方法参数类型或者是参数个数不同就是方法重载。方法重载典型使用场景是 String 中 valueOf 方法,它有 9 种实现。...方法返回类型不能作为方法重载依据,因为它不是方法签名组成部分。

    3.4K10

    JDK1.8以后hashmap为什么在链表长度8时候变为红黑树

    在JDK1.8以及以后版本中,hashmap底层结构,由原来单纯数组+链表,更改为链表长度8时,开始由链表转换为红黑树,为何大刀阔斧对hashmap采取这个改变呢,以及为何链表长度8才转变为红黑树呢...我们都知道,链表时间复杂度是O(n),红黑树时间复杂度O(logn),很显然,红黑树复杂度是优于链表,既然这么棒,那为什么hashmap为什么不直接就用红黑树呢,请看下图: 源码中注释写很清楚...那为什么选择8才会选择使用红黑树呢?看下图: 源码上说,为了配合使用分布良好hashCode,树节点很少使用。...为什么这么说呢,再看下图 在链表转变为红黑树方法中,有这样一个判断,数组长度小于MIN_TREEIFY_CAPACITY,就会扩容,而不是直接转变为红黑树,可不是什么链表长度8就变为红黑树,要仔细看代码...因为通常情况下,链表长度很难达到8,但是特殊情况下链表长度8,哈希表容量又很大,造成链表性能很差时候,只能采用红黑树提高性能,这是一种应对策略。

    67410

    C++ sizeof()运算符参数指针和数组为什么不同

    sizeof()参数指针和数组 C++或C语言中,都可以使用sizeof()运算符来计算数组字节大小,除此之外,在C++和C语言中,都可以使用一个指向数组第一个元素内存地址指针来引用数组,因此...,如果要计算数组字节大小,或长度,传递数组本身或传递指向数组指针给sizeof()运算符似乎都是可以,实际上则不然,二者有本质上区别。...和m值是不同!...这是为什么呢? 不同原因 这主要是因为当sizeof()运算符参数是数组本身,将计算是数组大小,而如果传递是指针作为参数,那计算便是指针大小,而不是整个数组。...来源:C++ sizeof()参数指针和数组区别 免责声明:内容仅供参考,不保证正确性。

    16121

    萌新不看会后悔C++基本类型总结(一)

    ,也就是说一共12种基本类型,至于为什么浮点数没有无符号类型,后面会说。...* _Str); 该函数功能是返回字符串长度,该字符串可能是自己定义,也可能是内存中随机存储,该函数实际完成功能是从代>表该字符串第一个地址开始遍历,知道遇到结束符NULL,返回长度不包括...char * ch = "nihao"; std::cout << strlen(ch); // 结果5 3.整形字面值 与C相同,C++也有三种不同书写方式来书写整数。...4.有无符号类型之间运算情况        说完sizeof和strlen,继续说基本类型长度,计算机内存基本单位是位(bit),8位一个字节,每一位有0和1两种组合,也就是说一个字节有 2 *...7.为什么浮点数没有分有无符号类型 有无符号类型说完,我们来说说文章开头留下问题,为什么浮点数没有有无符号之分: 想要使用unsigned,就意味着最高要用来表示数据,而不是正负,而浮点数定义中规定内存中数据第一位必须是符号位

    1.3K41

    【C语言】探索数据存储(下篇)

    : 这也是为什么会产生这么大数字,永远不可能小于0,会陷入死循环,这就是这道题。...(a)); return 0; } 结果: 这时候,你可能又不知道为什么了,a里面可能是-1,-2,-3…-1000。...如果你这样想,那肯定有问题,strlen()是求字符串长度,关注是字符串中‘\0’(既数字0)之前多少字符,而如果像上面这么想,里面根本没0,算不了。...但是实际情况是: 为什么strlen返回结果是size_t: size_t实际上是unsigned int。求字符串长度根本不可能是负数,所以设置unsiged int。...可能会出现精度缺失。 这些东西有什么用? IEEE 754规定: 对于32位浮点数,最高1位是符号位s,接着8位是指数E,剩下23位有效数字M。

    54750

    Redis:08---字符串对象

    64位有符号整数) 而浮点数取值范围和精度则与IEEE 754标准双精度浮点数(double)相同 返回值: INCR:返回增加后键值。...,那么Redis在执行操作时会将这个键值作为0来处理 如果所操作字符串不是一个能被解释整数或者浮点数字符串,那么这些命令操作将返回一个错误 很多存储系统和编程语言内部使用CAS机制实现计数功能...STRLEN:获取字符串长度(备注:中文占3个字节) strlen key ? ? GETSET:设置并返回原值。...getset和set一样会设置值,但是不同是,它同时会返回键原来值 getset key value ? 下面给出了其他一些演示案例: ? 注意SETRANGE用法: ?...②计数 许多应用都会使用Redis作为计数基础工具,它可以实现快速计数、 查询缓存功能,同时数据可以异步落地到其他数据源 应用场景1:文章长度计数功能、文章摘要、文章计数 文章长度STRLEN

    41210

    整数和浮点数在内存中存储​(大小端详解)

    2.1为什么有大小端?​...方法二(联合体) 若想了解更多联合体知识,请见拙作: 返回1是小端,返回0是大端 如果系统是小端,那么在内存中存储这个整数最低字节(也就是字节 c)将会是1,因为最低字节存储在最低内存地址处。...1…… strlen求字符串长度是\0,\0ASCII码值是0,其实找就是0,所以到0就终止 所以strlen计算长度:128+127 = 255 2.5下面代码输出结果...在大多数系统上,整数 9 和浮点数 9.0 在内存中表示是不同。 接下来,你通过 pFloat 将该内存位置值设置 9.0。...这就是为什么你得到了一个奇怪数字 1091567616(这个数字是 9.0 IEEE 754 单精度表示形式解释整数时结果)。

    75110

    C语言——B数据类型和变量

    每一种数据类型都有自己长度,使用不同数据类型,能够创建出长度不同变量,变量长度不同,存储数据范围就有所差异。...1.5.2 数据类型长度 1、sizeof 是求类型长度操作符; printf("%zd\n", sizeof(int));//括号里类型可替换成为其他 2、strlen 是求字符串长度函数——统计是字符串中...这⼀点与 int 不同, int 就是等同于 signed int 。 三、数据类型取值范围 上述数据类型很多,尤其数整型类型就有short、int、long、long long 四种,为什么呢?...,丢弃掉后面的小数部分; 商有小数:只有当定义浮点类型时并且在运算数中有一个浮点数时,打印时定义浮点型,才会进行浮点数除法。...• %e :使⽤科学计数法浮点数,指数部分 e ⼩写。 • %E :使⽤科学计数法浮点数,指数部分 E ⼤写。 • %i :整数,基本等同于 %d 。

    13210

    C语言之数据存储

    ---- 2.整形在内存中存储 我们知道一个变量创建是要在内存中开辟空间,空间大小是根据不同类型决定。那我们接下来谈谈数据在所开辟内存中到底是如何存储。...小端存储模式:把数据低位保存在内存低地址中,而数据高位保存在内存高地址中。 这是一个示例: 那为什么要有大端小端呢? 为什么会有大小端模式之分呢?...整形提升意义: 表达式整形运算要在CPU相应运算器件中执行,CPU内整形运算器(ALU)操作数字节长度一般也就是int字节长度,同时也是CPU通用寄存器长度。...return 0; } 分析: 因为strlen返回类型是size_t(无符号整形),两个无符号数相减还是无符号数,永远大于零。...接下来让我们分析第二个输出: 为什么 0x00000009 还原成浮点数,就成了 0.000000 ?

    1.5K00

    Redis入门手记

    ,Redis会返回错误 127.0.0.1:6379> incr num (integer) 1 因为num键是不存在,所有默认键值0,递增后键值1 127.0.0.1:6379> incr...(integer) 298 127.0.0.1:6379> get num "298" 递减指定整数 语法:decrby key increment 解释:increment递减量,返回key递减后值...语法:incrbyfloat key increment 解释:increment需要增加浮点数返回增加后字符串长度 特点:可以递增一个双精度浮点数 127.0.0.1:6379> set...5x10^4 "50010.900000000001" 在字符串键值后面追加值 语法:append key value 返回:增加后字符串长度 127.0.0.1:6379> set allms hello...获取键值字符串长度 语法:strlen key 返回:字符串长度Integer型 127.0.0.1:6379> strlen allms (integer) 12 同时获取多个键值 语法:mget

    40141

    数值问题

    也就是说上述数值比较中 2147483648 机器数始终是10...000B,2147483647机器数始终是 01...111B,之所以出现不同比较结果是因为 c 语言对它们进行了不同解释处理...此函数设想 str1 长时返回 1,否则返回 0;但实际上只有 str1 和 str2 长度相等时会返回 0,其他时候都返回1; 问题就出在函数 strlen() 返回值是 size_t,即 unsigned...也就是说比较是按照无符号数来比较,无符号数永远是大于等于 0 ,所以只有两个串儿长度相等时会使左边式子等于 0,其他时候左边结果机器数中肯定有非 0 位,那么按无符号数解释就会大于0,也就返回1了...改进方法:返回语句改成 return strlen(str1) > strlen(str2),直接让两个串长度比较,而不是做减法再与0比较。...这也是为什么编写程序时不要用浮点数来进行比较,特别是相等情况,因为你想比较数可能无法表示,机器自动给你转换了。

    19500

    C语言常用函数表

    g 十进制或指数形式浮点数 %c 字符 %s 字符串 %p 指针 %n 该参数存储到目前为止读取字符数值 %% %字符 控制输出长度修饰符 修饰符 说明 有效类型 %m.n m表示输出最小长度...,n表示小数点后位数 %f %e %g %m m表示输出最小长度 %d %u %o %x %f %e %g %c %s %p 比如: %10.2f表示输出最小长度10,小数点后位数2 %10s...表示输出最小长度10 控制输出对齐方式修饰符 | 修饰符 | 说明 |---|---|---| | - | 左对齐 | | + | 输出符号(正号或负号) | 比如: %-10.2f表示输出最小长度...10,小数点后位数2,左对齐 %+10.2f表示输出最小长度10,小数点后位数2,输出符号 示例¶ printf #include int main(void) { printf...strlen(const char *s); 返回字符串s长度 string.h char *strcpy(char *dest, const char *src); 将字符串src复制到dest

    10510

    9个提高代码运行效率小技巧你知道几个?

    消除循环中低效代码 3.1 示例代码   程序看起来没什么问题,一个很平常大小写转换代码,但是为什么随着字符串输入长度变长,代码执行时间会呈指数式增长呢?...每进行一次循环,都会对strlen调用一次。   下面我们看下strlen函数源码是如何计算字符串长度。...= '\0') { s++; length++; } return length; }   strlen函数计算字符串长度原理:遍历字符串,直到遇到‘\0’才会停止。...因此,strlen函数时间复杂度O(N)。lower1中,对于长度N字符串来说,strlen 调用次数N,N-1,N-2 ... 1。...5.3 改进代码   我们可以把求向量长度代码移到循环体外,同时抽象数据类型增加一个函数get_vec_start。这个函数返回数组起始地址。这样在循环体中就没有了函数调用,而是直接访问数组。

    81510

    【Redis实战】字符串类型(String)

    文章目录 1、set和get 2、递增数字(incr) 3、递减数字(decr) 4、增加指定整数(incrby) 5、减少指定整数(decrby) 6、增加指定浮点数(incrbyfloat)...7、向尾部增加值(append) 8、获取字符串长度strlen) 9、同时获取/设置多个键值(mset) 1、set和get   set和get是Redis中最简单两个命令,它们实现功能和编程语言中读写变量相似...:6379> decrby num 3 (integer) 2 127.0.0.1:6379> get num "2" 6、增加指定浮点数(incrbyfloat) 127.0.0.1:6379> incrbyfloat...8、获取字符串长度strlen)   UTF-8编码长度3,GBK编码长度2。...127.0.0.1:6379> strlen key (integer) 12 127.0.0.1:6379> set key "你好" OK 127.0.0.1:6379> strlen key (integer

    25120

    【C语言】C语言标准库大梳理(超全)

    #define STRING "x" char a = 'x'; 注意上面字符串和字符区别, 在 string.h 头文件中包含多个与字符串相关原型函数,比如 strlen()获取字符串长度。...上面的 EOF 是在stdio.h 中预处理#define EOF (-1), 在 Unix系统中一般采用文件字符长度来判断文件结束,当检测到文件结尾就会返回 EOF。...strlen()函数: 统计字符串长度。...strncat()函数:也是拼接字符串,只不过和 strcat() 不同是遇到空字符或长度限制自动停止,不会存在上面的 str1长度空间不够用情况。...strcmp()函数:两个字符串比较,类似于Java中 equals() 方法,比较不是地址,相等返回0,字典排序str1 str2 返回1。

    2.6K20

    数据在内存中存储(1)

    — 长整型 — 4/8 long long — 更长整形 — 8 float — 单精度浮点数 — 4 double — 双精度浮点数 — 8 long double 类型意义: 使用这个类型开辟内存空间大小...整形在内存中存储 我们之前讲过一个变量创建是要在内存中开辟空间,空间大小是根据不同类型而决定。...,而数据高位,保存在内存低地址中 小端(存储)模式,是指数据低位保存在内存低地址中,而数据高位,保存在内存高地址中 为什么有大端和小端: 为什么会有大小端模式之分呢?...例如:一个16bitshort型x,在内存中地址 0x0010,x0x1122,那么0x11高字节,0x22低字节。...(a));//strlen是求字符串长度,统计是\0之前出现字符个数;\0ASCII码值是0 //255 return 0; } #include unsigned

    15510
    领券