今天做作业写代码写到了以下语句

char * tempbuffer = new char[100]

该句代码的意思是定义了一个字符指针,指向一个内存大小为100字节的内存空间(在C++里,char占1个字节,所以字符数组的每个元素都占1个字节,100个元素就有100个字节)

我们直接打印该指针变量tempbuffer

#include<iostream>
using namespace std;
int main()
{char * tempbuffer = new char[100];                          //定义缓冲区cout << tempbuffer;
}

可以看到直接打印该指针变量结果是‘屯’,即没有初始化的内存地址

为了避免这种有乱码的情况,可以用以下方法进行处理

 //方法1:赋值固定初值0char a[100] = {0};cout << a;char * tempbuffer = new char[100];memset(tempbuffer, 0, 100);        //memset第2个参数是填写的值,第3个参数是大小cout << tempbuffer;//方法2:先用cin赋值也行char * tempbuffer1 = new char[100];     //定义缓冲区cin >> tempbuffer1;cout << tempbuffer1;char tempbuffer2[100];cin >> tempbuffer2;cout << tempbuffer2;
}

正确打印字符,字符数组的方法


//打印字符
char a = 'n';
printf("%c", a);             //正确输出,只有字符n//打印字符数组,方法1char a[3] = "nk";    //字符数组末尾有'/0'字符,所以占3个元素printf("%s", a);//打印字符数组,方法2
char * tempbuffer = "n";
printf("%s", tempbuffer);//打印字符数组元素
char * tempbuffer = "nk";
cout << tempbuffer[0]<<endl;
cout << tempbuffer[1];//打印字符数组全部元素
char s[3] = { 'a','b' };
cout << s;

下代码实现,在cmd窗口输入本地文件的路径,然后从文件中读100个字节到tempbuffer指针变量的缓冲区,从tempbuffer指向的首地址,拷贝7个字节的数据到字符数组preamble

#include "stdafx.h"
#include<climits>
#include<iostream>
#include <string>
#include <fstream>    // 用于文件操作
#include <iomanip>     //用于输入输出控制,如cin,coutusing namespace std;
typedef unsigned char UCHAR;    //定义无符号字符变量的别名
typedef unsigned int UINT;     //定义无符号整型变量的别名
const int PREAMBLE_LENGTH = 7;   //定义整型常量,前导码占7个字节int main()
{ifstream myfile;      //创建文件流对象
string filename;    while (!myfile.is_open()) {//myfile.clear();system("cls");  //清屏操作,清除cmd中的所有信息cout << "文件打开失败,请重新输入文件路径:";cin >> filename;myfile.open(filename.c_str(), ios::in | ios::binary);
}char * tempbuffer = new char[100];                          //定义缓冲区,字符指针指向100字节的内存地址
myfile.read(tempbuffer, 100);             //从文件中读100个字节,到tempbuffer,不太确定
//cout<<tempbuffer;                       //这里打印tempbuffer指针变量,为cmd显示空白,因为cmd无法正常打印二进制文件,但对手动创建txt文档适用UCHAR preamble[7];
memcpy(preamble, tempbuffer, 7);//cmd打印二进制文件的正确方法
for (int x = 0; x < PREAMBLE_LENGTH; x++)               // 输出格式:AA AA AA AA AA AA AA
{cout << setw(2) << hex << uppercase << (UINT)preamble[x] << " ";}
}

疑问在于,当文件对象myfile.read(tempbuffer, 100); 执行之后,再执行cout<<tempbuffer; 无法打印显示出任何东西,因为二进制文件的原因(在cmd中无法正常显示),而对于手动创建的txt文档能用这种方法打印出内容


经过更换文件(换成手动创建的txt文档,并手动输入内容),发现直接打印该指针变量能够显示出文件里面的内容,上述指针指向100字节的内存空间,后面没有赋值的部分显示为‘屯’,解决该问题的方法见上。

控制台输入字符串的方法如下
https://blog.csdn.net/ahzz123/article/details/70495617

【C++】关于char * tempbuffer = new char[100];相关推荐

  1. char*,const char*,string的相互转换 C++

    转:https://www.cnblogs.com/wxmdevelop/p/4567857.html string转const char* string s ="abc"; co ...

  2. GetMemeory(char *p);GetMemeory(char **p);char* GetMemeory()用法!

    void GetMemeory(char *p) {p=(char*)malloc(100); }void main() {char *str=NULL;GetMemory(str);strcpy(s ...

  3. char *p = new char[256]; delete p; / delete[] p; 哪个对 为什么

    原帖地址: http://topic.csdn.net/u/20071027/12/a31bf228-7b4f-40b2-be41-e3b859f643d4.html char *p = new ch ...

  4. char *s和char s[]的区别与联系以及strlen()和sizeof()的用法

    #include<iostream> using namespace std;void reverse(char s[]) {char *p, *q, temp;p = s;//p指向字符 ...

  5. char *字符串和char[]的区别

    简介 char *类型的字符串和char []类型的字符数组在 C 语言中经常用到,它们的主要区别在于如何定义和使用.char *类型的字符串是一个指向字符数组的指针,指针的值为第一个字符的地址,字符 ...

  6. char *arr与char a[ ]

    相同: 都定义一个字符串 不同: 1,含义上的区别:数组对应着一块内存区域,而指针是指向一块内存区域.其地址和容量在生命期里不会改变,只有数组的内容可以改变:而指针却不同,它指向的内存区域的大小可以随 ...

  7. 指针—— char p[] 和 char *p

    目录 1. char p[]和char *p   ☆☆☆☆ 2. 3.  函数里的指针** 4.数组作为函数参数传递 5. 两数交换的那些坑 6. 函数参数为指针应小心 7. 数组指针 ** 8. 二 ...

  8. char数组与char指针

    转载来源: https://www.cnblogs.com/nzbbody/p/3553222.html https://blog.csdn.net/jack_20/article/details/7 ...

  9. 【Qt开发】几个傻不拉几关于char*和const char*的不兼容问题

    1. string转const char* string s ="abc"; constchar* c_s = s.c_str(); 2. const char*转string 直 ...

最新文章

  1. pdf 加深 扫描件_为什么PDF文档不能像Word文档一样随便编辑?如何免费将PDF转换为Word?...
  2. Python - Windows系统下安装使用virtualenv
  3. 动态内表及动态ALV显示
  4. 放出php压缩HTML函数,轻松压缩html、js和Css
  5. 不止代码:洛谷P1064 金明的预算方案+P2014选课(依赖背包)
  6. P3369-[模板]普通平衡树【Splay】
  7. android timer后函数继续执行_Android连载34更新数据库以及使用SDK自带adb工具
  8. SAP License:选择ERP系统的诀窍
  9. PHP tcp短链接,示例:建立TCP链接
  10. 撰写项目的解决方案要点解析
  11. 深入学习MyBatis中的参数
  12. 金蝶K3系统物料替代功能的应用与业务逻辑探讨
  13. Win7edge浏览器看视频黑屏怎么解决?
  14. 小丁带你走进git的世界三-撤销修改
  15. 删除 Win10 资源管理器中的6个文件夹
  16. 动态规划:奶牛吃草问题
  17. 正定方言—正定少占鱼欢迎您,快速做个正定人
  18. MAC 常用终端命令
  19. Github详细教程
  20. 传感技术复习笔记(5)——电容式传感器

热门文章

  1. 基于android的即时通讯APP 聊天APP
  2. 6 数据库设计:实体-联系方法
  3. linux访问网页命令
  4. 单体测试使用Assert.assertThat(expected,Matcher matcher)来对比结果和预期
  5. Android电池矫正方法
  6. 2自由度悬架LQR控制
  7. 推荐一款文件分享工具-文叔叔
  8. Drools学习01
  9. android手机病毒原理,安卓手机病毒的原理是什么
  10. python中 “按位与,或,异或”与C语言的不同