Qt 如何将字符数组转换为qstring?

Qt 如何将字符数组转换为qstring?,qt,qt4,Qt,Qt4,我有一个数组- char name[256]; sprintf(name, "hello://cert=prv:netid=%d:tsid=%d:pid=%d\0", 1010,1200, 1300); QString private_data_string = name; 当我尝试执行以下操作时,此字符串的最后一个偏移量,即“\0” while(private_data_string.at(offset) != ':' && private_data_string.a

我有一个数组-

char name[256];
sprintf(name, "hello://cert=prv:netid=%d:tsid=%d:pid=%d\0", 1010,1200, 1300);
QString private_data_string = name;
当我尝试执行以下操作时,此字符串的最后一个偏移量,即“\0”

while(private_data_string.at(offset) != ':' &&
    private_data_string.at(offset) != ';' &&
    private_data_string.at(offset).isNull() == false)

应用程序中止。看起来数据指针在字符串“\”处也是零。我怎样才能解决这个问题

QString
不包含您期望的终止字符,这就是您在边界外失败断言的原因。这是正确的做法:

while(offset<private_data_string.length() &&
      private_data_string.at(offset) != ':' &&
      private_data_string.at(offset) != ';') {
   // ...
}

while(offset您需要知道几个事实:

  • 无需在字符串文字的tge结尾处写入
    \0
    。默认情况下,字符串文字以null结尾。文字
    “abc”
    实际上将包含4个字符,包括以null结尾的字符。字符串文字的结尾处有2个null字符
  • 您已经使用了默认构造函数
    QString(char*)
    。没有关于缓冲区长度的附加数据,因此
    QString
    从缓冲区读取字符,直到遇到第一个空字符为止。不管最后实际有多少空字符。空字符被解释为缓冲区结束标记,而不是字符串的一部分

  • 当您有QString“abc”时,它的大小是3(如果有另一个值,则会令人惊讶).Null字符不是字符串的一部分。
    QString::at
    函数可用于位置
    0谢谢!我正在尝试解决一个崩溃问题。我发现我有一个c样式的字符数组。我们正在转换为QString。这个c字符数组以Null结尾。我刚刚读到“未分配给任何对象的QString为空,即长度和数据指针均为0“。我相信这就是崩溃的原因,因为这里的数据指针也是零。更好的方法是使用QcString而不是Qstring。但是,我同意你的解决方案。我不知道你为什么说这个问题不好。我不必公开解决方案的代码。
    
    QString private_data_string = 
       QString("hello://cert=prv:netid=%1:tsid=%2:pid=%3")
       .arg(netid).arg(tsid).arg(pid);