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

当字符串被直接给定和被读取时,为什么strlen返回不同的值?

这个问题涉及到字符串的存储方式和C语言中字符串的特性。在C语言中,字符串是以字符数组的形式存储的,以'\0'(空字符)作为字符串的结束标志。

当字符串被直接给定时,例如:

代码语言:txt
复制
char str[] = "Hello";

这种情况下,编译器会自动在字符串的末尾添加一个'\0'字符,以表示字符串的结束。因此,使用strlen函数计算这个字符串的长度时,会从字符串的起始位置开始遍历,直到遇到'\0'字符为止,返回的长度不包括'\0'字符。

而当字符串被读取时,例如:

代码语言:txt
复制
char str[10];
scanf("%s", str);

这种情况下,用户输入的字符串会被存储在字符数组中,但是并不会自动在末尾添加'\0'字符。因此,使用strlen函数计算这个字符串的长度时,会从字符串的起始位置开始遍历,直到遇到内存中的任意一个值为0的字节为止,返回的长度包括最后一个非零字节。

综上所述,当字符串被直接给定时,strlen返回的长度不包括'\0'字符;而当字符串被读取时,strlen返回的长度包括最后一个非零字节。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供弹性计算能力,满足各类业务需求。产品介绍链接
  • 云数据库 MySQL 版:高性能、可扩展的关系型数据库服务。产品介绍链接
  • 人工智能机器翻译(AI翻译):基于深度学习的自然语言翻译服务。产品介绍链接
  • 腾讯云存储(COS):安全、稳定、低成本的云端存储服务。产品介绍链接
  • 腾讯云区块链服务(Tencent Blockchain):提供一站式区块链解决方案。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++基础语法重点总结

函数重载函数重定义需要是函数名相同,参数列表不同,函数重写需要函数名相同、参数列表相同返回相同(例外情况是协变析构函数重写。协变是返回可以不同,但是返回必须是父子关系类指针或引用。...const还能用来修饰局部变量,修饰常量字符串,修饰指针修饰函数参数返回。 说一说修饰指针情况 const修饰指针,分有常量指针指针常量。...,作用是一个变量声明为volatile,编译器会禁止将该变量读取写入操作放入寄存器中,确保每次读取写入都直接访问内存。...其它一些线程对该变量进行修改时,可以告诉编译器,这个变量不要优化,可以去内存中读取最新。...指针volatile修饰 告诉编译器该指针所指向对象可能会在不同时间外部因素更改,并且在访问该指针应该直接读取或写入内存,而不做任何优化。

19130

c语言面试知识点总结_c语言电话面试题

一、C语言面试 C语言面试题大汇总之华为面试题 二、链表 1、staticextern: 1). 在函数体,一个声明为静态变量在这一函数调用过程中维持其不变。 2)....请求一个使用信号量资源,进程需要先读取信号量信号量大于0,表示有资源可以请求。进程不再使用一个信号量控制共享资源,此信号量值加一。...(A):(B)) 6、strlensizeof比较 strlen返回长度,字符串以’\0’结尾,sizeof为占字节数 memset:作用是在一段内存块中填充某个给定,它是对较大结构体或数组进行清零操作一种最快方法...(1)不调用C++/C字符串库函数,请编写函数 strcpy (2)strcpy能把strSrc内容复制到strDest,为什么还要char * 类型返回? 答:为了 实现链式表达式。...多态:允许将子类类型指针赋值给父类类型指针 多态:是对于不同对象接收相同消息产生不同动作。

82630

手把手教你玩转常用字符串函数(包含模拟实现)

一、strlen 1.认识strlen 关于函数定义图片,本文均取自cplusplus.com - The C++ Resources Network 从函数返回类型可以看出strlen返回是一个无符号整型...%d\n",a);//将字符串长度打印出来验证 } 3.拓展:模拟实现strlen 首先,我们得明确strlen目标,它目标是要计算字符串长度,那么我们传递过去显然就应该是这个字符串首字符地址...strcpy(arr1, arr2);//arr1字符串arr2字符串覆盖 printf("%s\n", arr1);//打印被覆盖后字符串 } 为什么之前说覆盖呢,这里笔者通过vs编译器给大家展现一下...它返回类型是整型,有两个字符指针参数,这两个地址对应内容是不可被修改,参数类型为const char*其中值得一提是,str1对应字符串大于str2编译器返回大于0数,等于返回等于0...参数类型,一个是拼接,要能修改,一个是用来拼接,不需要修改,故参数类型分别是char*const char* 这些问题都想明白了,那么我们接下来就来说一下实现思路 关键在找到拼接字符串末尾

9910

LeetCode字符串高频题目整理(持续更新中)

,用栈可以很轻松实现 左括号出现时候入栈,右括号出现出栈,如果匹配就继续,不匹配就错误 字符串遍历完成之后,栈内仍有字符串就错误 用一个数组进行一个记录栈顶int进行了栈模拟,代码很简单...needle 是空字符串,我们应当返回什么呢?...解题思路   用startend分别指向相同字符终点与起点,start下一个与start不同,或者start指向最后一个字符,保存start指向字符与其出现次数,即start - end +...注意’A’’a’认为是两种不同字符。...我们返回 false,因为它在移动结束没有返回原点。 解题思路   直接统计字符串中RLUD个数就好了,只要个数RL并且UD,他总是可以回到原点。

1.2K10

Redis-字符串相关操作

-会将name值更新 set a 123 XX -- 如果不存在key为a数据,则这样使用会返回a 以上nxxx我在命令行试了不区分大小写 GET:获取字符串 语法:get key 如果给定...MSETNX与MSET主要区别在于,MSETNX只会在所有给定键都不存在情况下对键进行设置,而不会像MSET那样直接覆盖键已有的:如果在给定键当中,即使有一个键已经有值了,那么MSETNX命令也会放弃对所有给定设置操作...MSETNX命令在成功执行设置操作返回1,在放弃执行设置操作返回0。...STRLEN:获取字符串字节长度 语法:STRLEN key APPEND:追加新内容到末尾 语法:append key value APPEND命令在执行追加操作之后,会返回字符串值当前长度作为命令返回...语法:setrange key index string 将字符串从索引index开始部分替换为指定新内容,替换内容长度取决于新内容长度,命令执行完之后,会返回字符串值当前长度作为结果

36120

C语言从青铜到王者——函数详解【多个实例】

函数调用时,您向参数传递一个,这个被称为实际参数。参数列表包括函数参数类型、顺序、数量。参数是可选,也就是说,函数可能不包含参数。...程序调用函数,程序控制权会转移给调用函数。调用函数执行已定义任务,函数返回语句被执行时,或到达函数结束括号,会把程序控制权交还给主程序。...调用函数,传递所需参数,如果函数返回一个,则可以存储返回。...返回如下:• 串1=串2,返回0 • 串1>串2,返回正数 • 串1<串2,返回负数 注意:两个字符串进行比较,若出现不同字符,则以第一个不同字符比较结果作为整个比较结果。...(不含字符串结束标志“\0”),函数返回字符串实际长度 下面通过实例来了解一下strlen函数使用 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h

58120

熬夜整理万字CC++总结(二),值得收藏

0.为什么使用指针 假如我们定义了 char a=’A’ ,需要使用 ‘A’ ,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 地址,即指向 a 指针 p ,变量 a(...释放置 NULL 指针p指向内存空间释放,没有设置指针p为NULL。deletefree只是把内存空间释放了,但是并没有将指针p赋为NULL。...指针作为函数形参另一个典型应用是函数有多个返回情形。比如,需要在一个函数中统计一个数组最大、最小和平均值。当然你可以编写三个函数分别完成统计三个功能。...参数: str:字符串首地址 format:字符串格式,用法printf()一样 返回: 成功:实际格式化字符个数 失败: - 1 void test(){ //1....参数: str:指定字符串首地址 format:字符串格式,用法scanf()一样 返回: 成功:成功则返回参数数目,失败则返回-1 失败: - 1 //1.

1.2K20

Redis基础数据类型(string、hash、list)

SETEX 以上两个命令不同之处在于 SETEX 是一个原子(atomic)操作, 它可以在同一间内完成设置设置过期时间这两个操作, 因此 SETEX 命令在储存缓存时候非常实用。...nil ,键 key 存在但不是字符串类型, 命令返回一个错误。...GETSET key value STRLEN 返回键 key 储存字符串长度。键 key 不存在, 命令返回 0 , key 储存不是字符串返回一个错误。...GETRANGE 返回键 key 储存字符串指定部分, 字符串截取范围由 start end 两个偏移量决定 (包括 start end 在内)。...MGET 命令将返回一个列表, 列表中包含了所有给定。如果给定字符串键里面, 有某个键不存在, 那么这个键将以特殊 nil 表示。

79950

Redis数据类型之String字符串类型

(1)set 设置键, 语法:set 键名称 例如:我们添加一个name=“xiaoqian”键值对。 注意:重新设置则直接覆盖。 ?...如果 key 不存在,返回 nil 。如果key 储存不是字符串类型,返回一个错误。 ? GETRANGE key start end 用于获取存储在指定 key 中字符串字符串。...字符串截取范围由 start end 两个偏移量决定(包括 start end 在内) ?...GETBIT key offset 对 key 所储存字符串,获取指定偏移量上位(bit) MGET key1 [key2…] 获取所有(一个或多个)给定 key GETSET语法: GETSET...KEY_NAME VALUE Getset 命令用于设置指定 key ,并返回 key , key 不存在返回 nil STRLEN key 返回 key 所储存字符串长度

70510

【C语言】卍字通晓→函数+递归

通常把这些调用函数称为下层函数。函数调用发生时候,立即执行调用函数,而调用者则进入等待状态,直到调用函数执行完毕。函数可以又参数(void&int)返回。 ...隐含顺序:如果程序通常先从用户那里读取数据,然后再从一个文件中读取辅助数据,在设计系统编写一个函数,隐含哪一个首先执行信息。...C语言在发布已经为我们封装好了很多函数,它们分门别类地放到了不同头文件中,使用函数引入对应头文件即可。...---- 调用函数 创建 C 函数,会定义函数做什么,然后通过调用函数来完成已定义任务。 程序调用函数,程序控制权会转移给调用函数。...调用函数执行已定义任务,函数返回语句被执行时,或到达函数结束括号,会把程序控制权交还给主程序。就像我们上面举例说明代码一样!

73610

【C语言题解】用函数来模拟实现strlen()、strcpy()、strcmp()、strcat()

返回返回字符串长度(无符号整数)。...函数原型:char *strcpy(char *dest, const char *src); 参数dest是目标字符串指针,src是源字符串指针。 返回返回目标字符串指针。...'\0',我一开始经常忽略这部分,导致每次程序运行打印字符数组a都打出很多个 烫烫烫 这样乱码,这是内存中其他部分随机字节解释成字符后结果。...小于str2,则返回小于0 如果str1等于str2,则返回为0 如果str1大于str2,则返回大于0 它是一个字符一个字符地比较,ASCII码不同返回结果;如果两个字符完全相同就返回0 strcmp...原型:char *strcat(char *dest, const char *src); 参数dest是目标字符串指针,src是源字符串指针。 返回返回目标字符串指针。

9710

封神台一月靶场通关笔记

NULLFALSE在PHP中是不同,因此stripos(f, 'zkaqzkaq') === FALSE这个比较在f是数组不成立。 Payload 1. ?f=zkaqzkaq[] 2. ?...= '123'intval(number) == 123这两个条件。 要满足这两个条件,我们需要构造一个字符串,它不等于'123',但是使用intval函数转换为整数,它等于123。...在PHP中,一个字符串如"1e1234"用在数值上下文中,由于e后面跟随数字表示指数,"1e1234"在经过intval转换时候会被认为1 * 10^1234 Payload ?...true, false null 会相应地返回 TRUE, FALSE NULL。 如果 json 无法解码, 或者编码数据深度超过了递归限制的话,将会返回NULL 。.../flag'); } } 解题 PHP 中数组索引是整数,整数超出 PHP 整数最大,会发生溢出。

28110

redis简单使用

STRLEN:获取字符串字节长度通过对字符串键执行STRLEN命令,用户可以取得字符串键存储字节长度:STRLEN keyredis> GET number"10086"redis> STRLEN...2.1.12、INCRBY、DECRBY:对整数值执行加法操作和减法操作字符串键存储能够Redis解释为整数,用户就可以通过INCRBY命令DECRBY命令对存储整数值执行加法或减法操作...Redis键过期功能可以在指定时间到达,自动删除指定键。因为键过期功能针对是整个键,用户无法为散列中不同字段设置不同过期时间,所以一个散列键过期时候,它包含所有字段都将被删除。...,但是由于流s1s2都拥有可供读取元素,所以命令没有进入阻塞状态,而是直接返回了可供读取元素,并且元素数量没有超过COUNT选项限制。...需要注意是,与多个消费者组能够共享同一个流中元素不一样,同一消费者组中每条消息只能有一个消费者,换句话说,不同消费者将独占组中不同消息:一个消费者读取了组中一条消息之后,同组其他消费者将无法读取这条消息

1.8K20

校长讲堂第九讲

一个函数用在表达式中,其会被自动地转换为适当类型。然而,为了完成这个自动转换,编译器必须知道该函数实际返回类型。...没有更进一步声名函数假设返回 int,因此声名这样函数并不是必须。然而,sqrt()返回 double,因此在成功使用它之前必须要声名。...譬如在一些编译器中,它输出为 0 0 0 0 0 1 2 3 4。 为什么?因为 c 声名是 char 而不是 int。当你令 scanf()去读取一个整数,它需要一个指向一个整数指针。...程序最后到达文件结尾,scanf()不再尝试向 c 中放入新,i 才可以正常地增长,直到循环结束。 3.4 指针不是数组 C 程序通常将一个字符串转换为一个以空字符结尾字符数组。...而strlen()函数返回字符串参数中所包含字符数量,但不包括结尾空字符。因此,如果 strlen(s)是 n,则 s 需要 n + 1 个字符来盛放它。因此我们需要为 r 分配额外一个字符。

54231

最通俗易懂地讲解scanf、getsgetchar区别

) 中按照说明格式读入多个字符,并存入 ==以输入参数为地址变量== 中,所以必须得有 &,除了把字符串读入字符数组中。...比如最近在做PTA上C语言题库发现一个题: 给定 n 本书名称定价,本题要求编写程序,查找并输出其中定价最高最低名称定价。...3,留下了一个 回车,如果在这里直接接着使用一个 scanf 的话,就会出错: 因为 回车 会留在缓存流中,并下一个函数 get 读取到,从而扰乱了本来数据读取,继而出现了非预期结果。...(a);i++){ printf("%c",a[i]); } return 0; } 小结: 接收 空格 回车 3、实例 最直接方式进行对比就是求一下字符串长度。...回车,回车 会留在缓冲区中; gets 读取以任何字符开头字符串读取字符串包括 空格 但是不包括 回车,以 回车 结束输入,接收 空格 回车,但之后会丢弃 回车 并以 \0 代替; 最后一个图给出常用

5K31

「Redis」字符串

char buf[]; } len 为 8 ,表示在 buf 数组中保存了一个 8 字节长字符串 free 为 2 ,表示在 buf 数组中还有两个字节空间未使用。...而如果使用 C 字符串每次获取字符串长度时间复杂度则为 O(N)。即当我们使用 STRLEN 命令获取某个键值长度不用担心性能问题。 2 缓冲区溢出 其次,可以避免缓冲区溢出问题。...惰性空间释放 SDS 中字符串变短时,程序并不是直接进行内存重分配回收多余空间,而是使用 free 记录下来。如果将来再变长,可以直接使用。...SDS API 函数 作用 备注 sdsnew 创建一个包含给定 C 字符串 SDS sdsempty 创建一个不包含任何内容空 SDS sdsfree 释放给定 SDS sdslen 返回...SDS 已使用空间字节数 sdsavail 返回SDS 未使用空间字节数 sdsdump 创建一个给定 SDS 副本 sdsclear 清空 SDS 保存字符串内容 sdscat 将给定

32411

redis初识~String命令介绍

在Redis中用户可以直接使用院子atomic命令及其变种来计算聚合数据。 String :可以是字符串,也可以是整数或者浮点数。...时间复杂度:O(1) getbit : getbit redis 2 ----命令格式 对key所存储字符串 获取指定偏移量上位,给定偏移量大于字符串长度 返回0 ....字符串街区范围由start end 两个偏移量决定。包含 start end.时间复杂度: O(N),N 为要返回字符串长度。相当于截取子字符串。...,存在key会覆盖旧。这个命令 是一个原子操作,并且给定key是在同一间内改变。某些给定kkey更新 一些不备更新这个事情不会发生。...strlen key : 返回key所存储字符串长度。 key存储不是字符串 返回一个错误 。key不存在 返回0 。复杂度:O(1) ?

46130

STL&string&模拟实现

常用来作为string一些成员函数返回,表示“未找到”“不存在”等。例如find()查找字符/字符串查找无果。..._str); } 为什么strlen(s._str) + 1,因为strlen只获取字符串有效字符个数,不获取字符串结尾符号\0 但是strcpy函数会把拷贝字符串s...._str); } return *this; } 为什么选择引用返回: 传返回:拷贝要返回变量返回拷贝出临时变量。...使用引用拷贝相当于直接对本对象进行修改然后返回本对象,不需要经过修改-拷贝一个临时对象-将临时对象赋值给当前对象过程。 当然,返回类型应该也可以是void,不需要返回直接修改完当前对象即可。...),s1获取是hello,s2获取是world,因为helloworld之间空格作为终结符读取到了。

5710

【C语言】字符串函数

要注意strlen返回类型是size_t。 1.2 strlen模拟实现 我们知道strlen是用来求字符串长度,那我们实现就只需要遍历字符串,统计一下出现在\0,之前字符个数就行了。...此时就需要用到递归思想:大事化小 没有访问到\0,我们每次判断是否访问到\0,就进行加1,然后继续调用my_strlen。...两个字符串里面的字符有不同时候结束循环,再来判断里面字符字典序号。...8.2 strstr模拟实现 str2如果子串是空字符串直接返回str1。 要先保证str1str2不为空。...用s1s2来继续匹配,s2遍历完str2,并没有发现有与str1中相匹配,就重新返回str2,方便下一次匹配。

13710
领券