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

为什么在C中strrev后面会有一个垃圾值?

在C语言中,strrev函数用于反转一个字符串。然而,strrev函数是非标准的,不是所有的编译器都支持该函数。因此,在使用strrev函数时可能会出现一些问题,其中之一就是在反转字符串后会出现垃圾值。

这是因为C语言中的字符串是以null字符('\0')结尾的字符数组。当使用strrev函数反转字符串时,它会将字符串中的字符逆序排列,但不会改变字符串的长度。因此,如果原始字符串的长度超过了反转后的字符串长度,那么在反转后的字符串末尾会保留原始字符串中的垃圾值。

例如,考虑以下代码:

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

int main() {
    char str[] = "Hello";
    strrev(str);
    printf("%s\n", str);
    return 0;
}

输出结果可能是"olleH",但是由于strrev函数没有改变字符串的长度,所以在反转后的字符串末尾可能会保留原始字符串的垃圾值。因此,输出结果可能是"olleH+",其中"+"表示垃圾值。

为了避免出现垃圾值,可以在使用strrev函数之前,先使用strlen函数获取字符串的长度,然后使用一个循环将字符串中的字符逆序排列。

总结起来,strrev函数在C语言中是非标准的,不是所有的编译器都支持该函数。在使用strrev函数时,可能会出现垃圾值的问题,因为它不会改变字符串的长度。为了避免这个问题,可以手动编写一个逆序排列字符串的函数。

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

相关·内容

简单聊聊字符串的翻转问题

字符串的翻转在日常开发使用程度比较少,但是面试过程却是常有的。最近看php 源码strrev,因此写一篇文记录对字符串翻转问题的一些学习。...一个循环中,把字符串从后往前复制到一个新的变量中去,然后返回。时间复制度是O(n),空间复制度O(n)。 另一种方案则是原有字符串上做修改。分别设置两个标记变量。...分别从字符串的前面,后面向中间靠拢,当两个标记相遇则结束。...这就跟"不引入其他变量,交换两个变量的"一样(数值变量,或者等长度字符串变量) $str = "Hello word"; $i = 0; $j = strlen($str)-1; while ($i...上面的问题处理单元是"字符",而这里的问题处理单元是"单词" 这类字符翻转有两种办法,一个先使用strrev翻转整个句子,然后再对里面的单词依次翻转。

54020
  • PHP细节

    为什么 第三题:foreach和取地址运算符& $arr = [1,2,3,4,5,8]; foreach($arr as &$v) { //nothing todo....'; } //&是取地址运算符,$v = &$a; 这时$v就是$a变量在内在的存储地址,$v改变$a同样会改变,因为是一个地址 var_dump($arr); //1,2,3,4,5,8...'; } var_export($arr); //1,2,3,4,5,5 &是取地址运算符,$v = &$a; 这时$v就是$a变量在内在的存储地址,$v改变$a同样会改变,因为是一个地址..."; 运行结果: 直接用PHP自带strrev函数反转: Englist->tsilgnE English中国->��學�hsilgnE English国->���hsil���gnE 中华人民共和国...[0])); } 三、isset、empty、if用法区别以及0、‘’、null之间关系 3.1 empty用法 ---- bool empty ( mixed var) 如果 var 是非空或非零的

    73530

    常用Golang工具类函数实现(一)

    概要在使用Golang开发,标准库提供了很多好用的函数可以帮助我们快速的实现一些功能。但是相对于其他语言来说,还是有很多好用且常用的函数或者方法,是没有被加入到标准库的,这里就需要我们自己的来实现。...Empty 判断一个变量,是否为空源码// EmptyInterface 定义Empty接口type EmptyInterface interface { IsEmpty() bool}type...Strpos 判断一个字符串一个字符串的首次出现的位置源码func Strpos(haystack, needle string, offset int) int { length := len...Strrev 翻转字符串源码func Strrev(str string) string { runes := []rune(str) runesLen := len(runes) for...("abcd")) fmt.Println(Strrev("hi abc")) fmt.Println(Strrev("123456"))}结果=== RUN TestStrrevdcbacba

    60961

    【愚公系列】2023年05月 攻防世界-Web(web2)

    这些算法都有不同的特点和用途,比如MD5和SHA1可以用于生成密码的散列,而AES可以用于对数据进行加密和解密。实际使用需要根据具体需求选择合适的加密算法。...一、web2 1.题目 2.答题 加密算法的步骤: 先时将flag字符串逆序 然后每一个ascii码数值+1 然后base64加密 然后逆序 然后再rot13加密 得到加密的密文:a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws...php $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws"; $miwen=base64_decode(strrev...i,1); $__=ord($_c)-1; # 字符转数字,减1 $__=chr($__); # 数字转字符 $_=$_.$__; # 拼接字符串 } echo strrev($_); #...> php在线编辑网站:https://c.runoob.com/compile/1/ 得到flag:flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

    38430

    为什么你需要少看中文技术博客以及如何在Python里面精确四舍五入

    今天又有一个Python初学者被中文技术博客垃圾文章给误导了。 这位初学者的问题是: Python,如何精确地进行浮点数的四舍五入,保留两位小数?...例如对于一个小数 a.bcd,需要精确到小数点后两位,那么就要看小数点后第三位: 如果 d小于5,直接舍去 如果 d大于5,直接进位 如果 d等于5: d后面没有数据,且c为 偶数,那么不进位,保留c...d后面没有数据,且c为 奇数,那么进位,c变成(c + 1) 如果 d后面还有非0数字,例如实际上小数为 a.bcdef,此时一定要进位,c变成(c + 1) 关于奇进偶舍,有兴趣的同学可以维基百科搜索这两个词条...官方文档已经很清楚地说明了,如果你传入的参数为浮点数,并且这个浮点计算机里面不能被精确存储,那么它会先被转换为一个不精确的二进制,然后再把这个不精确的二进制转换为 等效的十进制。...,官方文档里面都能找到原话,多到文档寻找答案,少看装逼货的垃圾博客。

    69220

    如何在 Python 里面精确四舍五入?

    今天又有一个Python初学者被中文技术博客垃圾文章给误导了。 这位初学者的问题是: Python,如何精确地进行浮点数的四舍五入,保留两位小数?...例如对于一个小数 a.bcd,需要精确到小数点后两位,那么就要看小数点后第三位: 如果 d小于5,直接舍去 如果 d大于5,直接进位 如果 d等于5: d后面没有数据,且c为 偶数,那么不进位,保留c...d后面没有数据,且c为 奇数,那么进位,c变成(c + 1) 如果 d后面还有非0数字,例如实际上小数为 a.bcdef,此时一定要进位,c变成(c + 1) 关于奇进偶舍,有兴趣的同学可以维基百科搜索这两个词条...官方文档已经很清楚地说明了,如果你传入的参数为浮点数,并且这个浮点计算机里面不能被精确存储,那么它会先被转换为一个不精确的二进制,然后再把这个不精确的二进制转换为 等效的十进制。...,官方文档里面都能找到原话,多到文档寻找答案,少看装逼货的垃圾博客。

    5K50

    php字符串处理函数总结~

    ucfirst();//返回字符串并将字符串的第一个字母转成大写字母。 $myString = 'hello world is a simple program!'...();//将字符串小写转换成大写,原来大写的不变;  ucfirst();   //将字符串一个字符转成大写;  ucwords();   //将字符串一个单词的首字母转成大写;  str_repeat...出现的位置;  char://指定的字符;  [int offset]://限制从那个字符之后开始找指定字符最先出现的位置;  strrpos();   //和strpos()用法一样,是返回某字符串某个字符串..."最后"出现的位置  strrchr(string string , char);   //返回指定字符某字符串"最后"出现的字符串的头位置到结尾的字符串;  str_pad(string, int...')   //那么$url的所有c换成n,所有m换成t;对应着换;  strtr(string,array);     //把数组array"键名"和参数1里相同的字符替换成数组"键名"对应的

    96820

    strstr函数头文件_strstr函数

    函数名: strstr 功 能: 查找指定字符串的第一次出现 用 法: char *strstr(char *str1, char *str2); 程序例: #include #include..., c); printf(“%s\n”, destination); return 0; } 函数名: strchr 功 能: 一个查找给定字符的第一个匹配之处\ 用 法: char *strchr...than buffer 3\n”); else printf(“buffer 2 is less than buffer 3\n”); return 0; } 函数名: strncmpi 功 能: 将一个的一部分与另一个串比较...char *str1 = “abcdefghi”; strcpy(string, str1); printf(“%s\n”, string); return 0; } 函数名: strcspn 功 能: 查找第一个给定字符集内容的段...n”, *ptr); else printf(“strpbrk didn’t find character in set\n”); return 0; } 函数名: strrchr 功 能: 查找指定字符的最后一个出现

    1.2K10

    Python里精确地四舍五入,以及你为什么需要少看垃圾博客

    今天又有一个Python初学者被中文技术博客垃圾文章给误导了。 这位初学者的问题是: Python,如何精确地进行浮点数的四舍五入,保留两位小数?...因为并不是所有的小数计算机中都是不精确的。例如0.125这个小数计算机中就是精确的,它就是0.125,没有省略后面,没有近似,它确确实实就是0.125。...例如对于一个小数a.bcd,需要精确到小数点后两位,那么就要看小数点后第三位: 如果d小于5,直接舍去 如果d大于5,直接进位 如果d等于5: d后面没有数据,且c为偶数,那么不进位,保留c d后面没有数据...,且c为奇数,那么进位,c变成(c + 1) 如果d后面还有非0数字,例如实际上小数为a.bcdef,此时一定要进位,c变成(c + 1) 关于奇进偶舍,有兴趣的同学可以维基百科搜索这两个词条:数值修约和奇进偶舍...官方文档已经很清楚地说明了,如果你传入的参数为浮点数,并且这个浮点计算机里面不能被精确存储,那么它会先被转换为一个不精确的二进制,然后再把这个不精确的二进制转换为等效的十进制

    5.6K63

    深入AQS源码阅读与强软弱虚4种引用以及ThreadLocal原理与源码

    compareAndAetTail(oldTail,node),oldTail是它的预期,假如说我们想把当前线程设置为整个链表尾巴的过程,另外一个线程来了,它插入了一个节点,那么仔细想一下Node...我们来看这个小程序,这个小程序,我们用到了ThreadLocal,我们看main方法第二个线程,这个线程1秒终之后往tl对象设置了一个Person对象,虽然我们访问的仍然是这个tl对象,第一个线程两秒钟之后回去...主要想说明一下垃圾回收的过程,各种引用它不同的表现,垃圾回收的时候,它是会调用fifinalize()这个方法的,什么意思?...当我们new出来一个象,java语言里是不需要手动回收的,CC++是需要的,在这种情况下,java的垃圾回收机制会自动的帮你回收这个对象,但是它回收对象的时候它会调用fifinalize()这个方法...,我们重写这个方法之后我们能观察出来,它什么时候被垃圾回收了,什么时候被调用了,我在这里重写这个方法的含义是为了以后面试的时候方便你们造火箭,让你们观察结果用的,并不说以后什么情况下需要重写这个方法,

    23630

    php基础知识点回顾

    定义和用法 strrev() 函数反转字符串。 语法 strrev(string) 参数 描述 string 必需。规定要反转的字符串。...echo和print都可以做输出,不同的是,echo不是函数,没有返回,而print是一个函数有返回,所以相对而言如果只是输出 echo 会更快,而print_r通常用于打印变量的相关信息,通常在调试中使用...print 是打印字符串 print_r 则是打印复合类型 如数组 对象 $arr = array('a','b','c'); foreach($arr as &$v){ } print_r(...$arr); 结果: Array ( [0] => a [1] => b [2] => c ) foreach($arr as $v){ } print_r($arr); 结果...[1] => b [2] => b ) HTTP请求 请求方法(所有方法全为大写)有多种,各个方法的解释如下: GET 请求获取Request-URI所标识的资源 POST Request-URI

    88240

    指针01

    系统api用过地址找到内存存放的内容 也是字符v 地址这么长不方便我们书写 我们是不是可以找一个容器存放这些地址---> 指针 指针 定义一个指针 定义一个什么类型的指针就在类型后面一个 比如要定义一个字符指针...内存视图; 上图是我们新建一个变量在内存的存储视图 接下来我会画一个指针在内存的视图 请各位辨析 如何获取 指针指向地址的 通过解引用 即在要解引用的指针前加一个* int a =...是1个字节 如果是int则是四个字节递增 *(p+1)表示取出p递增4个字节的地址的 如果这个地址没有赋值 则会返回一个垃圾 为什么指针会有类型 既然指针是存放地址的变量,那为什么不能找一个通用的指针类型存放指针...printf("szieof char %d\n", sizeof(char)); printf("address of p0 %d value of p0 = %d\n", p0, *p0); 为什么解引用字节型指针和整数型指针的解引用会有差异...void指针只保存了 指针的 并没有记录 指针指向对象的类型。因此解引用void指针时候,要明确类型,直接解引用是错误的。

    12420

    C语言函数小集合

    一、字符操作 函数名: fputc 功 能: 送一个字符到一个 用 法: int fputc(int ch, FILE *stream); 函数名: fputs 功 能: 送一个字符串到一个...详 细: 逐次比较两个字符串前n个字符的每一个字符(用第一个字符串的字符的ASCII减去第二个字符串的相应字符的ASCII),如果相等则继续比较下一个;如果不等,ASCII的差值就是返回。..., c); printf("%sn", destination); return 0; } 函数名: strchr 功 能: 一个查找给定字符的第一个匹配之处 用 法: char *...str1 = "abcdefghi"; strcpy(string, str1); printf("%sn", string); return 0; } 函数名: strcspn 功 能: 查找第一个给定字符集内容的段..., *ptr); else printf("strpbrk didn't find character in setn"); return 0; } 函数名: strrchr 功 能: 查找指定字符的最后一个出现

    1.2K20
    领券