您的位置:首页 > 其它

字符串指针和字符数组的诡异问题

2014-07-29 13:59 351 查看
背景:QT编程,dateTimeEdit是一个QCombobox下拉菜单控件,从中读取事件日期转换为char 类型,eventLogMessage.shartDateTime是char * 类型。

这是最原始的实现方法:

QDateTime dd = ui->dateTimeEdit->dateTime();

QString tt = dd.toString("yyyy-MM-dd hh:mm:ss");

QByteArray aa =tt.toLatin1();

eventLogMessage.shartDateTime=aa.data();

第一种修改方法:做一个函数实现,函数输入参数为ui->dateTimeEdit->dateTime(),返回值为aa.data();

char *dvr_eventlog::dateTimeToChar(QDateTime dateTime)

{

char *re;

QString str=dateTime.toString("yyyy-MM-dd hh:mm:ss");

QByteArray ba=str.toLatin1();

re=ba.data();

return re;

}

主函数调用处:

eventLogMessage.shartDateTime=dateTimeToChar(ui->dateTimeEdit->dateTime());

结果是:printf打印验证结果是对的,但是后面这个时间数据用于SQLite数据检索读出的时候就有问题了。

第二种修改方法:做一个无返回值的函数,使用参数传出方式返回aa.data(); 值

void dvr_eventlog::dateTimeToChar(QDateTime dateTime,char *tmp)

{

QString str=dateTime.toString("yyyy-MM-dd hh:mm:ss");

QByteArray ba=str.toLatin1();

strcpy(tmp,ba.data());

}

主函数调用处:

char tmp[50];

dateTimeToChar(ui->dateTimeEdit->dateTime(),tmp);

eventLogMessage.shartDateTime=tmp;

结果是:printf打印的结果与前两种方式完全相同strlen长度也相同,但这样就可以检索出来(与之前相同的日期时间,格式也相同)

第三种修改方法:还是做一个无返回值得函数,使用两级指针返回字符串

void dvr_eventlog::dateTimeToChar(QDateTime dateTime,char **tmp)

{

QString str=dateTime.toString("yyyy-MM-dd hh:mm:ss");

QByteArray ba=str.toLatin1();

*tmp=ba.data();

}

主函数调用处:

char *tmp;

dateTimeToChar(ui->dateTimeEdit->dateTime(),&tmp);

eventLogMessage.shartDateTime=tmp;

疑问:这样做有问题吗?

最终结果:采用方式二
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: