Char数组和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();
}
}
我总是收到带有消息的连载印刷品。我让它在char而不是数组上工作。语法是什么才能正常工作。当我调用方法时,我给出的是:
Motors::manualMotion(90,50,"FORW","BACK");
它不起作用。当我使用像F和B这样的一个字符时,它可以正常工作。
因为不能按==
比较C样式字符串,所以应该使用strcmp
。
然而arduino没有STL,但有一个端口,然后您可以享受STL。另一种方法是使用std::string
而不是C样式的字符串。
void Motors::manualMotion(int CycleDutyAzim,int CycleDutyPitch,
const std::string &directionAzim, const std::string &directionPitch) { // ...
if (directionPitch == "FORW")
不能使用==
来比较字符串。
当您将数组传递给函数时,它会衰减为指向其第一个元素的指针。当您使用==
进行比较时,它只将指针的地址与字符串文字"FORW"的地址进行比较。这显然不是你想要做的。你想要的是字符串文本和指针指向的内容的比较。
如果需要比较c样式字符串,则需要strcmp
。
另一方面,为什么在C++中使用char []
而不是std::string
呢?它为您省去了手动内存管理的所有问题,并且您可以简单地使用==
进行字符串对象比较。
C/C++char * ==
不会按照您的想法执行,而是使用strcmp/stricmp/strncmp
等。别担心,这是一个常见的错误,尤其是当你习惯于使用固有字符串类型的语言时。
此外,您可能会考虑枚举类型,而不是传递字符串。
if (variable == value)
只能用于比较简单类型、字符和整数。字符数组不是一个简单的类型,所以您需要一个函数来进行比较。strcmp
或stricmp
将适用于您。
您应该使用字符串比较。数组比较不以这种方式存在。C++不会仅仅因为char
数组通常是以null结尾的字符串就进行以null结尾字符串的比较。CCD_ 16在这件事上不会像CCD_ 17那样受到特殊对待。
要么使用类似std::string的字符串类,要么使用strcmp。
这不是比较C样式字符串的方式,您应该使用strcmp()
或类似的字符串。当你做
directionAzim=="FORW"
您正在比较指针。
char directionAzim[]
在你的原型中也可以写为:
char *directionAzim
并且CCD_ 19是类型CCD_。所以,如果你正在通过:
Motors::manualMotion(90,50,"FORW","BACK");
这是不安全的,因为没有什么可以阻止函数尝试更改文字(这可能会使程序崩溃(。你的原型应该是这样的:
void Motors::manualMotion(int CycleDutyAzim,int CycleDutyPitch,
const char directionAzim[], const char directionPitch[]);
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- 初学者的 if 语句语法错误
- 返回语句中的构造函数语法
- 这个 typedef 语句中的语法在做什么
- 带有 or 表达式的 If 语句中的语法错误
- C++条件语句(语法正确)
- 插入语句的语法错误
- 此 for 循环语句的正确语法
- C/C++中#define的不同语法,包括许多语句
- 语法帮助:在 else-if 语句中全为零的行
- 如果 else 语句中的 C++ 错误,我的语法有什么问题
- 案例"p"的问题 ||"P":C++ switch 语句中的语法
- 我的代码中有一个错误,可能是语法或我找不到的 if 语句。编程新手
- 使用 && 运算符和 2 个变量在 if 语句中正确使用语法
- Char数组和if语句语法
- 这些语法正确的C++语句有任何意义吗
- QODBCResult::exec: 无法执行语句:"[Microsoft][ODBC SQL Server Driver]COUNT 字段不正确或语法错误
- switch 语句 - 修改 Duff 设备的语法 - 这是合法的 C/C++吗?