字符串指针和字符数组的诡异问题
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;
疑问:这样做有问题吗?
最终结果:采用方式二
这是最原始的实现方法:
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;
疑问:这样做有问题吗?
最终结果:采用方式二
相关文章推荐
- C/C++字符串,字符数组,字符指针及其相互静态拷贝与追加的安全问题解决方案(2)
- 关于字符串 字符数组 字符型指针的问题
- C/C++字符串,字符数组,字符指针及其相互静态拷贝与追加的安全问题解决方案(1)
- C常见问题之字符串数组和字符指针数组问题
- 二维数组、字符数组、指针数组涉及字符串和具体元素问题
- 关于C语言字符数组、字符串和指针的相关问题
- c语言字符指针数组经典,此后不必再担心字符串问题.
- c语言字符指针数组经典,此后不必再担心字符串问题.
- C字符串、字符数组、指针数组、指向数组的指针 彻底研究
- 字符串、字符数组、字符指针
- C语言中字符数组和字符串指针分析
- Exe7 删除字符串中指定的字符 (还有有问题——指针的问题)
- C语言中字符数组和字符串指针分析
- 字符串、字符数组、数组、指针关系总结
- 二维字符串数组指针的问题
- C语言中字符数组和字符串指针分析
- 关于字符指针和字符数组的小问题
- 数组/指针,字符数组/字符串/指向字符的指针
- C语言中字符数组和字符串指针分析
- 字符数组与字符指针赋初值问题