c++ static 问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 11:31:44
char a[4];
file_in.read(a,4); //读入的4个字符是PKPI
cout<<strcmp(a,"PKPI");
输出1
cout<<a;
输出PKPI?D

static char a[4]; //多一个static
file_in.read(a,4); //读入的4个字符是PKPI
cout<<strcmp(a,"PKPI");
输出0
cout<<a;
输出PKPI

怎么解释啊?

没有static的那个你有没有发现输出PKPI后面跟着一些乱码呢?
这个就是因为那字符串到没了结尾符号
你把第一段代码改成
char a[5] = "";
file_in.read(a,4); //读入的4个字符是PKPI
a[4] = 0;
cout<<strcmp(a,"PKPI");
结果应该就是一致的
至于
static为什么会正确我想大概是static分配的那段内存刚好全是0所以没问题,
这写法很不安全,要记住处理字符串一定在最后要有个\0的结束符,否则在执行一些字符串的命令的时候程序会以为你的字符串还没结束而得到错误判定

strcmp命令返回值顺便提下:
<0 第一个字符串小于第二个字符串 比如 "123" < "1234"
0 两个字符串完全一致
>0 第一个字符串大雨第二个字符串 比如 "1234" > "123"

这种大小比较方式在stl中的string容器也是这么计算的