Qt的main函數參數使用注意問題

argc = arguments count

argv = arguments values


argc是int型,argv是字符串char[]/char*類型,在使用argv[1]等值時,需要注意它們不是QString類型的值。

需要轉換QString(argv[1])或者QLatinlString(argv[1]),然後再使用,比如與"a"比較。

注意實例:

#include <QApplication>
#include <QDebug>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
//    if(QLatin1String(argv[1]) == "a")
    if(argv[1] == "a")
    {
        qDebug()<<"this is label 1"<<endl;
    }
    else
    {
        qDebug()<<"this is label 2"<<endl;
    }
 
    if(QLatin1String(argv[1]) == argv[1])
        qDebug()<<"equal"<<endl;
 
    return a.exec();
}

當使用if(argv[1] == "a"),輸出爲:
this is label 2
equal

當使用if(QLatin1String(argv[1]) == "a"),輸出爲:
this is label 1
equal

請問爲什麼兩個if語句結果不同,而QLatin1String(argv[1]) 和argv[1]卻是equal ?
將QLatinlString換成QString結果也一樣。


問題原因:

char* a,*b
a==b是對a,b指針進行比較,不是對於a,b指針的內容進行比較
如果需要比較a,b指向的內容可以使用strcmp(a,b)

QLatin1String(a)會返回一個QString的類型
QString是重載了opeartor==操作的,
QString str,char* a
str==a實際上是比較str和a的內容

所以:
if(QLatin1String(argv[1]) == "a")其實就是一個QString和一個char*進行比較,這個時候比較的就是實際內容
if(argv[1] == "a")這個時候其實就是兩個char*進行比較,比較的是char*的值,這兩個值肯定是不一樣的
if(QLatin1String(argv[1]) == argv[1])這個也是一個QString和一個char*進行比較,所以比較的是字符串內容。

當用if(!strcmp(argv[1],"a"))時就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章