strcmp

Ambiguous behaviour of strcmp()

本秂侑毒 提交于 2020-03-22 08:38:25
问题 Please note that I have checked the relevant questions to this title, but from my point of view they are not related to this question. Initially I thought that program1 and program2 would give me the same result. //Program 1 char *a = "abcd"; char *b = "efgh"; printf("%d", strcmp(a,b)); //Output: -4 //Program 2 printf("%d", strcmp("abcd", "efgh")); //Output: -1 Only difference that I can spot is that in the program2 I have passed string literal, while in program I've passed char * as the

Ambiguous behaviour of strcmp()

淺唱寂寞╮ 提交于 2020-03-22 08:36:38
问题 Please note that I have checked the relevant questions to this title, but from my point of view they are not related to this question. Initially I thought that program1 and program2 would give me the same result. //Program 1 char *a = "abcd"; char *b = "efgh"; printf("%d", strcmp(a,b)); //Output: -4 //Program 2 printf("%d", strcmp("abcd", "efgh")); //Output: -1 Only difference that I can spot is that in the program2 I have passed string literal, while in program I've passed char * as the

UNIX下的LD_PRELOAD环境变量

孤者浪人 提交于 2020-03-18 13:19:46
某厂面试归来,发现自己落伍了!>>> 前言 也许这个话题并不新鲜,因为 LD_PRELOAD 所产生的问题由来已久。不过,在这里,我还是想讨论一下这个环境变量。因为这个环境变量所带来的安全问题非常严重,值得所有的 Unix 下的程序员的注意。 在开始讲述为什么要当心 LD_PRELOAD 环 境变量之前,请让我先说明一下程序的链接。所谓链接,也就是说编译器找到程序中所引用的函数或全局变量所存在的位置。一般来说,程序的链接分为静态链接和 动态链接,静态链接就是把所有所引用到的函数或变量全部地编译到可执行文件中。动态链接则不会把函数编译到可执行文件中,而是在程序运行时动态地载入函数 库,也就是运行链接。所以,对于动态链接来说,必然需要一个动态链接库。动态链接库的好处在于,一旦动态库中的函数发生变化,对于可执行程序来说是透明 的,可执行程序无需重新编译。这对于程序的发布、维护、更新起到了积极的作用。对于静态链接的程序来说,函数库中一个小小的改动需要整个程序的重新编译、 发布,对于程序的维护产生了比较大的工作量。 当 然,世界上没有什么东西都是完美的,有好就有坏,有得就有失。动态链接所带来的坏处和其好处一样同样是巨大的。因为程序在运行时动态加载函数,这也就为他 人创造了可以影响你的主程序的机会。试想,一旦,你的程序动态载入的函数不是你自己写的,而是载入了别人的有企图的代码

使用==与strcmp进行字符串比较

最后都变了- 提交于 2020-03-16 14:55:54
某厂面试归来,发现自己落伍了!>>> 似乎PHP的 === 运算符区分大小写? 那么有没有理由使用 strcmp() ? 做以下事情是否安全: if ( $password === $password2 ) { ... } #1楼 strcmp将根据它运行的环境返回不同的值(Linux / Windows)! 原因是它有bug,因为bug报告说 https://bugs.php.net/bug.php?id=53999 请小心处理!!谢谢。 #2楼 不要在PHP中使用 == 。 它不会做你期望的。 即使您将字符串与字符串进行比较,PHP也会隐式地将它们转换为浮点数,并在它们看起来是数字时进行数值比较。 例如 '1e3' == '1000' 返回true。 你应该使用 === 代替。 #3楼 嗯..根据这个 php bug报告 ,你甚至可以得到0wned。 <?php $pass = isset($_GET['pass']) ? $_GET['pass'] : ''; // Query /?pass[]= will authorize user //strcmp and strcasecmp both are prone to this hack if ( strcasecmp( $pass, '123456' ) == 0 ){ echo 'You successfully

共用体练习 Time Limit: 1000 ms Memory Limit: 65536 KiB 1960

旧城冷巷雨未停 提交于 2020-03-05 10:15:51
共用体练习 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定n和m,接下来有n个描述,每个描述包含一个类型标志和一组相应的数据。类型标志共3种:INT DOUBLE STRING,然后对应一组相应的数据。紧接着有m个询问,每个询问仅包含一个整数x,要求输出第x个描述对应的数据(STRING类型保证不含空格,每组对应STRING数据不会超过19个字符)。 Input 输入的第一行为两个整数,n和m (n<=100000, m<=100000),分别代表描述的个数和询问的个数。接下来为 n 行描述,最后为m行询问,具体格式见样例输入输出。 Output 对于每个询问,输出对应的结果,注意:浮点数保留两位小数。 Sample Input 5 4 INT 456 DOUBLE 123.56 DOUBLE 0.476 STRING welcomeToC STRING LemonTree 0 1 2 4 Sample Output 456 123.56 0.48 LemonTree Hint 必须使用共用体完成。 Source # include <stdio.h> # include <stdlib.h> # include <string.h> union { int a ; double b ; char

简单枚举类型——植物与颜色 Time Limit: 1000 ms Memory Limit: 65536 KiB 1959

倖福魔咒の 提交于 2020-03-05 09:59:29
简单枚举类型——植物与颜色 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 请定义具有red, orange, yellow, green, blue, violet六种颜色的枚举类型color,根据输入的颜色名称,输出以下六种植物花朵的颜色: Rose(red), Poppies(orange), Sunflower(yellow), Grass(green), Bluebells(blue), Violets(violet)。如果输入的颜色名称不在枚举类型color中,例如输入purple,请输出I don’t know about the color purple. Input 输入数据有多行,每行有一个字符串代表颜色名称,颜色名称最多30个字符,直到文件结束为止。 Output 输出对应颜色的植物名称,例如:Bluebells are blue. 如果输入的颜色名称不在枚举类型color中,例如purple, 请输出I don’t know about the color purple. Sample Input blue yellow purple Sample Output Bluebells are blue. Sunflower are yellow. I don’t know

CF1304B Longest Palindrome(STL+String+Struct)

前提是你 提交于 2020-03-04 23:48:44
CF有些上不了,用洛谷链接代替传送 这道题还是遇到蛮多问题,虽然这对dalao来说都是水题,不过我这蒟蒻还是要总结一下所遇到的问题。 1. 判断俩个字符串相等函数strcmp (str1,str2)中str1,str2为字符串首地址 开始我strcmp(string a,string b)显然错误,那如何返回string 的首个地址呢,我之前博客也有记录,调用string 中的c_str( )函数即可。 所有只要改为strcmp( a.c_str( ),b.c_str( ) ) 即可解决 CE; 顺便巩固一下strcmp的用法: (1).strcmp(str1,str2)>0 按照字典序str1大于str2 (2).strcmp(str1,str2)==0 相等 (3).strcmp(str1,str2)<0 str1<str2 2. string中 reverse(a.begin( ),a.end( ) ) 因为首次使用,直接百度了一下用法,按照自己理解就开始用,然后就CE , 哭了 。 我是这样用的: 3.insert(int pos,string a) 首次使用,正确运用,hhhhhh string a = "China" ; string temp = reverse ( a , a + n ) ; //错的 下面为正确用法: string a = "china" ;

模拟shell程序

我的梦境 提交于 2020-03-02 07:43:09
要求: 能识别 > , < 的输入输出重定向。 能识别出管道操作。 支持多重管道: 比如 cat | cat | cat | cat 。 支持管道和重定向的混合。 解决管道输入输出重定向和管道输出重定向和文件重定向共存的问题。 分析: 简单指令 此类指令无重定向, 无管道, 则其执行方式应该是主进程创建一个子进程, 将指令字符串组装成字符串数组后再添加调用 exec 函数即可。 带有重定向的指令 方案一 : > 和 < 直接当做命令行参数传递给 exec 函数。 经过测试, exec 并不能解析重定向符号 。 方案二 : 手动打开文件然后后 dup2 了。 带有管道的指令 将指令从管道符号拆分成多条指令, 每条指令分给一个子线程, 并让一个管道分隔的两个子进程一个获得一个管道的读端, 一个获得进程写端, 且将写端的进程的标准输出重定向到写端的文件描述符。如下图所示: 实现 /** * 完成一个模拟shell的程序。 */ # include <stdio.h> # include <stdlib.h> # include <string.h> # include <sys/types.h> # include <sys/stat.h> # include <fcntl.h> # include <unistd.h> char commands [ 1024 ] ; /*

strcmp的返回值怎么理解容易?

。_饼干妹妹 提交于 2020-03-01 19:07:07
strcmp的返回值分析 首先我们都知道它是一个字符串比较函数,通过两个字符串的相应的每一位字母(注意这里是字母)的ascll码然后得出一个结果。 其实有一种简单的方式可以判断它的 返回值 到底是什么,通过这篇文章,你或许就可以摆脱死记硬背了。 首先从根源上讲起,它既然是将strcmp(char a,char b)这其中的字符串a与字符串b的对应每一位字符ascll码相比较,那么我们就可以理解为字符串a的ascll码和与字符串b的ascll码和做了一个 相减 的过程,然后得出了各自不同的结果。由此我们得出以下结论 首先若a=b 那么就说明它们相减为0自然返回值也就是0。 其次a>b 那么就说明它们相减为个正整数返回值也便是正整数。 最后a<b 那么也就说明返回值是一个负数 分析到此结束,感谢大家查看,如有错误,恭听大神们赐教。 来源: CSDN 作者: 小于的程序录 链接: https://blog.csdn.net/yuchengxuyuan/article/details/104595140

模拟堆

人走茶凉 提交于 2020-03-01 10:38:02
维护一个集合,初始时集合为空,支持如下几种操作: “I x”,插入一个数x; “PM”,输出当前集合中的最小值; “DM”,删除当前集合中的最小值(数据保证此时的最小值唯一); “D k”,删除第k个插入的数; “C k x”,修改第k个插入的数,将其变为x; 现在要进行N次操作,对于所有第2个操作,输出当前集合的最小值。 输入格式 第一行包含整数N。 接下来N行,每行包含一个操作指令,操作指令为”I x”,”PM”,”DM”,”D k”或”C k x”中的一种。 输出格式 对于每个输出指令“PM”,输出一个结果,表示当前集合中的最小值。 每个结果占一行。 数据范围 1≤N≤1051≤N≤105 −109≤x≤109−109≤x≤109 数据保证合法。 输入样例: 8 I -10 PM I -10 D 1 C 2 8 I 6 PM DM 输出样例: -10 6 # include <iostream> # include <string.h> using namespace std ; const int N = 1e6 + 10 ; int h [ N ] , ph [ N ] , hp [ N ] , size_h ; void heap_swap ( int a , int b ) { swap ( ph [ hp [ a ] ] , ph [ hp [ b ] ] ) ;