我正在尝试将十六进制值存储在字符指针数组中并将其传递给另一个函数,该函数计算十六进制值的 CRC。但问题是有时输出相同或有时 pttr[0] 的值为 0。
这是我现在得到的结果,0xFF 0xFF。我在这里做错了什么吗?谢谢。
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
char *pttr[2];
pttr[0] = QString("0x%1").arg(155, 2, 16, QLatin1Char('0')).toLatin1().data();
pttr[1] = QString("0x%1").arg(255, 2, 16, QLatin1Char('0')).toLatin1().data();
printf("%s \n",pttr[0]);
printf("%s \n",pttr[1]);
return a.exec();
}
最佳答案
使用的问题
char *pttr[2];
pttr[0] = QString("0x%1").arg(155, 2, 16, QLatin1Char('0')).toLatin1().data();
pttr[1] = QString("0x%1").arg(255, 2, 16, QLatin1Char('0')).toLatin1().data();
就是有两层临时对象。
QString("0x%1").arg(155, 2, 16, QLatin1Char('0'))
创建临时 QString
对象。
QString("0x%1").arg(155, 2, 16, QLatin1Char('0')).toLatin1()
创建临时 QByteArray
对象。
这些行执行完毕后,pttr
最终持有两个悬挂的指针。取消引用这些指针会导致未定义的行为。
请注意,即使
QString str("Some value");
char const* cp = str.toLatin1().constData();
不正确。 cp
在这种情况下也是一个悬挂指针。
你应该捕获 QString
对象和使用 toLatin1().constData()
当您需要获得对底层 char
的只读访问权限时对象。
QString str_array[2];
str_array[0] = QString("0x%1").arg(155, 2, 16, QLatin1Char('0'));
str_array[1] = QString("0x%1").arg(255, 2, 16, QLatin1Char('0'));
printf("%s \n", str_array[0].toLatin1().constData());
printf("%s \n", str_array[1].toLatin1().constData());
关于c++ - Qt 字符指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52395177/