c++ - Qt 字符指针数组

标签 c++ arrays qt pointers

我正在尝试将十六进制值存储在字符指针数组中并将其传递给另一个函数,该函数计算十六进制值的 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/

相关文章:

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

c++ - 依赖网络时的 Qt 测试

c++ - ATL COM 代码在升级到 VS2015 时无法编译

python - SWIG、mingw32、distutils 的问题

c - 从整数数组中提取 float

c++ - 链表数组(5 个队列)

c++ - QThreads , QObject 和 sleep 函数

c++ - QTableWidget;使用 celllChanged 信号

c++ - C++ 流对象何时使用互斥锁?

c# - 是否可以在C#中创建 “perfect forwarding”泛型集合?