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"))時就可以了。