簡體   English   中英

字符數組和if語句語法

[英]Char arrays and if statement syntax

我在使用char數組和if語句時遇到問題。

我嘗試做:

void Motors::manualMotion(int CycleDutyAzim,int CycleDutyPitch,char directionAzim[],char directionPitch[]){


    setCycleDutyA(CycleDutyAzim);
    setCycleDutyP(CycleDutyPitch);

    if(directionAzim=="FORW"){
        moveForwAzim();
    }else if(directionAzim=="BACK"){
        moveBackAzim();
    }else{
        Serial.println("FAIL");
        handbreakAzim();
    }

    if(directionPitch=="FORW"){
        moveForwPitch();
    }else if(directionPitch=="BACK"){
        moveBackPitch();
    }else{
        Serial.println("FAILED");
        handbreakPitch();
    }
}

我一直在獲得帶有消息的serial.prints。 我使它與char而不是數組一起工作。 為了正常工作的語法是什么?當我調用該方法時,我給出了這個:

Motors::manualMotion(90,50,"FORW","BACK");

它不起作用。當我使用一個像F和B這樣的字符時,它可以正常工作。

if (directionPitch == "FORW")

您不能使用==比較字符串。

當您將數組傳遞給函數時,它會作為指向其第一個元素的指針而衰減。 當使用==進行比較時,它僅將指針的地址與字符串文字“ FORW”的地址進行比較。 這顯然不是您想要執行的操作。 您想要的是將字符串文字與指針所指向的內容進行比較。

如果需要比較c樣式的字符串,則需要strcmp

另一方面,為什么在C ++中仍然使用char []而不是std::string 它為您節省了手動內存管理的所有問題,您只需將==用於字符串對象比較即可。

因為您不能通過==比較C樣式的字符串,所以應該使用strcmp

但是arduino還沒有STL,但是有一個port ,那么您可以享受STL。 另一種方法是使用std::string而不是C樣式的字符串。

void Motors::manualMotion(int CycleDutyAzim,int CycleDutyPitch,
const std::string &directionAzim, const std::string &directionPitch) { // ...

C / C ++ char * ==不能滿足您的要求,請改用strcmp/stricmp/strncmp等。 別擔心,這是常見的錯誤,特別是如果您習慣於具有固有字符串類型的語言。

另外,您可以考慮枚舉類型而不是傳遞字符串。

if (variable == value)只能用於比較簡單類型,字符,整數。 字符數組不是簡單的類型,因此您需要一個函數來進行比較。 strcmpstricmp將為您工作。

這不是比較C樣式字符串的方式,應該使用strcmp()或類似的字符串。 當你做

directionAzim=="FORW"

您正在比較指針

char directionAzim[]

在您的原型中也可以寫成:

char *directionAzim

"FORW"的類型為const char * 因此,如果您通過:

Motors::manualMotion(90,50,"FORW","BACK");

這是不安全的 ,因為沒有什么可以阻止該函數嘗試更改文字(這可能會使您的程序崩潰)。 您的原型應如下所示:

void Motors::manualMotion(int CycleDutyAzim,int CycleDutyPitch,
   const char directionAzim[], const char directionPitch[]);

您應該使用字符串比較。 數組比較不存在這種方式。 C ++不會進行以null終止的字符串比較,只是因為char數組通常是一個以null終止的字符串。 char[]在此問題上不會比int[]受到特殊對待。

使用諸如std :: string之類的字符串類,或使用strcmp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM