易截截图软件、单文件、免安装、纯绿色、仅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++程序员注意问题

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

C#动态调用C++编写的DLL函数


动态加载DLL需要使用Windows API函数:LoadLibrary、GetProcAddress以及FreeLibrary。我们可以使用DllImport在C#中使用这三个函数。

[DllImport("Kernel32")]
public static extern int GetProcAddress(int handle, String funcname);

[DllImport("Kernel32")]
public static extern int L ......

.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号