CFile::Read()读取MP3文件出现乱码! char* str = new char[4];memset(str,0,4); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 查了下memset(str, 0, 4)是使用ASCII表中编号为0的字符(空字符)初始化str.但是当我定义char* str = new char[3];的时候,不管这个str当中的初值字符是什么,在使用CFile::Read的时候,不是会用读取出来的字符“TAG”(ASCII: 54 41 47)来覆盖掉之前的内容吗,既然我设置的str的内存只有3个字节,那么理论上只能存放下”TAG“,那后面的那些乱码又是存放在哪里的呢?为什么这个在申请内存的时候,要多申请1个字节的位置呢? char* str = new char[3];// [4]str[3]=0; // 0 1 2 = T A G ;;; 3=0 (0 结尾 sz)m_mp3.Read(str, 3);// 只读3个, 如果TAG在文件中是字符串 就可以读 4个 (包括0)m_mp3.Close(); if(str == "TAG")return; 可以: strncmp(str,"TAG",3);// "TAG" 是字符串, str 不是 字符串 , 加0 才是 查了下memset(str, 0, 4)是使用ASCII表中编号为0的字符(空字符)初始化str.但是当我定义char* str = new char[3];的时候,不管这个str当中的初值字符是什么,在使用CFile::Read的时候,不是会用读取出来的字符“TAG”(ASCII: 54 41 47)来覆盖掉之前的内容吗,既然我设置的str的内存只有3个字节,那么理论上只能存放下”TAG“,那后面的那些乱码又是存放在哪里的呢?为什么这个在申请内存的时候,要多申请1个字节的位置呢?读取的会覆盖掉之前的内容,多申请一个位置是用来放结束标志'\0'的。你这里没有结束标志,所以编译器认为你的串还没结束,就从内存地址继续取字节放到str中了,就是一些随机的内容了 查了下memset(str, 0, 4)是使用ASCII表中编号为0的字符(空字符)初始化str.但是当我定义char* str = new char[3];的时候,不管这个str当中的初值字符是什么,在使用CFile::Read的时候,不是会用读取出来的字符“TAG”(ASCII: 54 41 47)来覆盖掉之前的内容吗,既然我设置的str的内存只有3个字节,那么理论上只能存放下”TAG“,那后面的那些乱码又是存放在哪里的呢?为什么这个在申请内存的时候,要多申请1个字节的位置呢?读取的会覆盖掉之前的内容,多申请一个位置是用来放结束标志'\0'的。你这里没有结束标志,所以编译器认为你的串还没结束,就从内存地址继续取字节放到str中了,就是一些随机的内容了看来我的猜测正确了,谢谢啊~ 如何查找 MSDN 上面的 例子代码?? 关于MFC编程的 按位取反 的运算符是什么。 一个简单的问题:关于对话框的DestroyWindow() (100分)求解winmm.dll中句柄泄露解决方案 阻塞状态到非阻塞状态的转换? 请大家帮我看一段程序 关于读入文件 窗口移动后引起的位图刷新,用什么方法解决呢? 求SYS的资料 求助写了一个ActixeX界面,里面有一个edit框,但是无法响应backspace,已经弄了一天了,还没解决,急!急!急! DDX_CONTROL的疑惑
查了下memset(str, 0, 4)是使用ASCII表中编号为0的字符(空字符)初始化str.但是当我定义char* str = new char[3];的时候,不管这个str当中的初值字符是什么,在使用CFile::Read的时候,不是会用读取出来的字符“TAG”(ASCII: 54 41 47)来覆盖掉之前的内容吗,既然我设置的str的内存只有3个字节,那么理论上只能存放下”TAG“,那后面的那些乱码又是存放在哪里的呢?为什么这个在申请内存的时候,要多申请1个字节的位置呢?
str[3]=0; // 0 1 2 = T A G ;;; 3=0 (0 结尾 sz)
m_mp3.Read(str, 3);// 只读3个, 如果TAG在文件中是字符串 就可以读 4个 (包括0)
m_mp3.Close();
if(str == "TAG")return; 可以: strncmp(str,"TAG",3);// "TAG" 是字符串, str 不是 字符串 , 加0 才是
查了下memset(str, 0, 4)是使用ASCII表中编号为0的字符(空字符)初始化str.但是当我定义char* str = new char[3];的时候,不管这个str当中的初值字符是什么,在使用CFile::Read的时候,不是会用读取出来的字符“TAG”(ASCII: 54 41 47)来覆盖掉之前的内容吗,既然我设置的str的内存只有3个字节,那么理论上只能存放下”TAG“,那后面的那些乱码又是存放在哪里的呢?为什么这个在申请内存的时候,要多申请1个字节的位置呢?读取的会覆盖掉之前的内容,多申请一个位置是用来放结束标志'\0'的。
你这里没有结束标志,所以编译器认为你的串还没结束,就从内存地址继续取字节放到str中了,就是一些随机的内容了
查了下memset(str, 0, 4)是使用ASCII表中编号为0的字符(空字符)初始化str.但是当我定义char* str = new char[3];的时候,不管这个str当中的初值字符是什么,在使用CFile::Read的时候,不是会用读取出来的字符“TAG”(ASCII: 54 41 47)来覆盖掉之前的内容吗,既然我设置的str的内存只有3个字节,那么理论上只能存放下”TAG“,那后面的那些乱码又是存放在哪里的呢?为什么这个在申请内存的时候,要多申请1个字节的位置呢?读取的会覆盖掉之前的内容,多申请一个位置是用来放结束标志'\0'的。
你这里没有结束标志,所以编译器认为你的串还没结束,就从内存地址继续取字节放到str中了,就是一些随机的内容了看来我的猜测正确了,谢谢啊~