c,c++风格字串与strcmp
众所周知,strcmp为字串比较只用,简单的函数并不简单。
下面的代码
int main()
{
char* cp1 = {'z', 'h', 'a', 'n', 'g'};
char* cp2 = {'z', 'h', 'a', 'n', 'g'};
std::cout<<strcmp(cp1, cp2)<<std::endl;
return 0;
}
看到命名两个字符串相等,但是程序竟然输出-1;
什么原因
其实strcmp在比较过程中如果传入的是c风格的字串像下面这样
char* cp1 = "zhang";
char* cp2 = "zhang";
这是实际上比较的是两个字串的首地址,而这两个字面定义的字串都隐含着类型是const
于是他们在内存中具有相同的地址,所以即使比较两个指针的内容(两个串的地址),也会得到
正确的结果。不过仍然很惊讶,对于不同的字串系统竟然能够准确根据其大小在内存中排列
例如上面的cp1和cp2地址都是 0x0046b01c;
而char* cp2 = "zhou" 这时的cp2地址将是0x0046b04大于原来的地址。所以strcmp的比
较结果才会有这样的定义。
对于c++风格的字符数组形式如果传入的同意数组的元素地址,strcmp将比较两者地址,而
如果传入的不是同一个数组的元素地址(包括首地址),将出现不可预料结果,原因是这样的
做法并为定义!
//////////////////by xiaomi/////////////////////////////
/////////////////only for study /////////////////////////
//////////////////////////////////////////////////////////
相关文档:
系统环境:Windows 7
软件环境:Visual C++ 2008 SP1 +SQL Server 2005
本次目的:编写一个航空管理系统
这是数据库课程设计的成果,虽然成绩不佳,但是作为我用VC++ 以来编写的最大程序还是传到网上,以供参考。用VC++ 做数据库设计并不容易,但也不是不可能。以下是我的程序界面,后面 ......
1.排序小程序:练习排序基本算法和函数的应用,并体味函数用法的好处。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define DATA 10
int ArrGrounp[ DATA ];
int ArrGrounp1[DATA];
#define DEFINE1 "请输入10个数:\n"
#define DEFINE2 "满足条件的数有:"
#define DEFINE3 "\n满足条件 ......
高质量C++编程 Note
定义1:能长期稳定地编写出高质量程序的程序员称为编程老手。
定义2:能长期稳定地编写出高难度、高质量程序的程序员称为编程高手。
版权和版本的声明位于头文件和定义文件的开头 ,主要内容有:
(1)版权信息。
(2)文件名称,标识符,摘要。
(3)当前版本号,作者/修改者,完成日期。
......
1、C/C++程序员请注意,不能在case语句不为空时“向下执行”。
2、值类型和引用类型之间的区别:C#的基本类型(int,char等)都是值类型,是在栈中创建的。而对象是引用类型,创建于堆中,需要使用关键字new。
3、在C#中通过实例访问静态方法或成员变量是不合法的,会生成编译器错误。但是我们可以通过声明他们 ......
Main.cpp (Win/*nix)
#include "FlexSecurityBox.h"
int main(int argc, char ** argv) {
char * address;
short port;
if (argc == 2)
{
address = "0.0.0.0";
port = atoi(argv[1]);
} else if (argc == 3)
{
address = argv[1];
port = atoi(argv[2]);
} else
{
printf("Y ......