• 6322阅读
  • 3回复

[提问]Qt调试的一些问题~ [复制链接]

上一主题 下一主题
离线gaojinwei
 
只看楼主 倒序阅读 楼主  发表于: 2011-08-19
有些问题向大家请教,先看第一段程序:
#include <QtCore/QCoreApplication>
#include <QFile>
#include <QDebug>
#include <string.h>
#include <iostream>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString tmp = "55aa";
    QByteArray text = tmp.toLocal8Bit();
    char *data = new char[text.size() + 1];
    strcpy(data, text.data());
    //qDebug()<<text.toHex()<<'t';
    int i=0;
     while (i<4) {
         qDebug()<<*data;
         i++;
         data++;
     }
    return a.exec();
}
我可以在调试的时候看到"55aa"的存储位置,如图所示:




但是,换做如下代码:
#include <QtCore/QCoreApplication>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QByteArray org,org1;     //读取原始数据
    QFile file("D:/data/000000001.dat");
    file.open(QIODevice::ReadOnly);
    org = file.readAll();
    org1 = org.left(0x06);
    char *pDATA = new char[org1.size() + 1];
    strcpy(pDATA, org1.data());
    qDebug()<<org1.toHex()<<org1.size();
    return a.exec();
}
按理说和上面的代码一样pDATA的地址应该是存放org1中的数据,但是我在地址中却发现存放的不是这个数据。
控制台输出截图:

pDATA的地址存储的数据应该是:"0004050555aa"才对啊。可是我调试的时候看到如下情况:


存储的值不一样。

最后我把我所读取的文件数据用附件形式传上来了,我的最终目的是想找到:到底这个程序的org,org1,*pDATA都存放在内存的哪个位置,我搞了好几天,实在是不懂,请论坛上的牛人帮帮忙吧,谢谢了先。
数据的截图:我用ultraEdit打开的~一共就16个Byte。


000000001.zip (1 K) 下载次数:1






离线gaojinwei
只看该作者 1楼 发表于: 2011-08-19
昨天晚上睡觉的时候稍微想明白了一点,不知道对不对,大家帮我看看:org1的取值用十六进制表示是从0x00-0xfe127,而Qt里的char难道不是默认的unsigned char?我用signed char 储存范围是-128-127。 但是我要是把程序而改为:unsigned char *pDATA = new unsigned char[org1.size() + 1];
strcpy(pDATA, org1.data());  提示在strcpy这横有错误:

是不是在Qbytearray中,org1.data()返回的值是char*型,而不能复制给unsighed char*?大家帮忙看卡怎么解决这个问题~


离线gaojinwei
只看该作者 2楼 发表于: 2011-08-19
问题解决了,主要问题出在strcpy上,strcpy遇到“\0"就结束了,我数据开始就是”\0”;所以改成用memcpy就okey了,哎,我基本功太不扎实,我把方法贴出来了,菜鸟们一起进步吧。
离线gaojinwei
只看该作者 3楼 发表于: 2011-08-19
但是我还是不知道,怎么追踪org,org1的地址,大牛们有什么建议?我想找到org,org1在内存当中的位置~
快速回复
限100 字节
 
上一个 下一个