易截截图软件、单文件、免安装、纯绿色、仅160KB

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 /////////////////////////
//////////////////////////////////////////////////////////


相关文档:

航空公司管理系统(VC++ 与SQL 2005)

系统环境:Windows 7
软件环境:Visual C++ 2008 SP1 +SQL Server 2005
本次目的:编写一个航空管理系统
      这是数据库课程设计的成果,虽然成绩不佳,但是作为我用VC++ 以来编写的最大程序还是传到网上,以供参考。用VC++ 做数据库设计并不容易,但也不是不可能。以下是我的程序界面,后面 ......

高质量 C/C++编程笔记

高质量C++编程 Note
定义1:能长期稳定地编写出高质量程序的程序员称为编程老手。
定义2:能长期稳定地编写出高难度、高质量程序的程序员称为编程高手。
版权和版本的声明位于头文件和定义文件的开头 ,主要内容有:
(1)版权信息。
(2)文件名称,标识符,摘要。
(3)当前版本号,作者/修改者,完成日期。
......

C#中C/C++程序员注意问题

1、C/C++程序员请注意,不能在case语句不为空时“向下执行”。
2、值类型和引用类型之间的区别:C#的基本类型(int,char等)都是值类型,是在栈中创建的。而对象是引用类型,创建于堆中,需要使用关键字new。
3、在C#中通过实例访问静态方法或成员变量是不合法的,会生成编译器错误。但是我们可以通过声明他们 ......

.net实例:使用C++调用C#的DLL

1 创建C# DLL,需要指定应用类型为“类库”,代码:
namespace CSLib
{
    public class Class1
    {
        private string name;
        public string Name
      ......

Developer Support Languages VC++, C# and VB.NET


Welcome to Microsoft Developer Support, Languages team blog! You will find a lot of language related troubleshooting resources here.
Troubleshooting PInvoke Related Issues 
I am back with some more PInvoke Stuff.  Recently I was working on a PInvoke issue which I found interesting ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号