鱼C论坛

 找回密码
 立即注册
查看: 2914|回复: 1

C++ 二进制流 char 明明是8位为什么会变成16位??求求各位大虾有谁知道?帮帮忙?

[复制链接]
发表于 2012-5-19 17:08:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 cswz88 于 2012-5-19 17:16 编辑

#include <IOSTREAM.H>
#include <IOMANIP.H>
#include <FSTREAM.H>
#include <stdlib.h>
#include <MATH.H>
#include <string.h>

void main(void)
{
      char c1,c2,c[]={"ABCDEFGH"},c3[8]={0};
     ofstream outfile("letter.dat",ios:: out | ios::binary);
     if(!outfile)
    {
         cout << "不能打开目标文件";
         exit(1);
    }

     outfile.write((char*)c,sizeof(char)*(strlen(c)));
     outfile.flush();

    ifstream infile("letter.dat",ios::in | ios::binary);

    if(!infile)
    {
        cout << "不能打开源文件";
        exit(1);
    }

    infile.seekg(3);
    infile.read((char*)&c1,sizeof(char));
    cout << c1 << '\n';
    cout <<strlen(c) << endl;
    cout << "请输入新字母:";
    cin >> c1;
    outfile.seekp(5);
    outfile.write((char*)&c1,sizeof(char));
    outfile.flush();
    infile.seekg(5);
    infile.read((char*)&c2,sizeof(char));
    cout << c2 << endl;

    outfile.close();
    infile.close();

    ifstream infile2("letter.dat",ios::in | ios::binary);
    infile2.read((char*)&c3,sizeof(char)*8);
    cout << strlen(c3) << endl;    //这里为什么strlen(c3)是16而不是8?
    for (int i =0;i<strlen(c3);i++)  //输出的是16位而不是8位?
    {
        cout << c3[i][ i ];   
    }
}


[/i]
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-20 08:19:35 | 显示全部楼层
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <FSTREAM.h>
  4. #include <string.h>

  5. int main(int argc, char* argv[])
  6. {
  7.         char szRead[8]={0};
  8.         fstream file("readme.txt",ios::in);

  9.         file.read(szRead,8);
  10.         printf("%d\n",strlen(szRead));       //输出的是11而不是8,为啥呢?
  11.         return 0;
  12. }
复制代码
strlen是求字符串长度,而系统将以0x00作为ascii字符串结尾的标志。懂了吧。
你如果还是要读取8个字符到c3,建议在定义的时候写成:char c3[9]={0},然后下面最多只能读取8个,最后一个0x00用作字符串结尾标志。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-13 09:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表