把(isDraw ? LCD_DisString_Not(x, y, (char *)stringArray[(int)val]) : LCD_DisString(x, y, (char *)stringArray[(int)val]));封装成一个函数
时间: 2024-03-01 08:56:31 浏览: 120
你可以尝试这样封装成一个函数:
```c++
void drawString(bool isDraw, uint16_t x, uint16_t y, const char* stringArray[], float val){
if(isDraw){
LCD_DisString_Not(x, y, (char *)stringArray[(int)val]);
}else{
LCD_DisString(x, y, (char *)stringArray[(int)val]);
}
}
```
然后你可以通过调用`drawString()`函数来代替原来的那段代码,例如:
```c++
drawString(isDraw, x, y, stringArray, val);
```
注意,这里的`stringArray`参数应该是一个指向指针的指针,例如:
```c++
const char* stringArray[] = {"Hello", "World", "!"};
```
如果你的字符串数组不是这种类型,你需要相应地修改函数参数。
相关问题
void displayString(int isDraw, float val, char* stringArray[], int x, int y) { (isDraw ? LCD_DisString_Not(x, y, stringArray[(int)val]) : LCD_DisString(x, y, stringArray[(int)val])); } const char gcszOnOff[][NEW_DEF_LEN] = {// 投入退出 { "退出" }, { "投入" } }; displayString(0, 1, (char **)gcszOnOff, (i % 9) + 1, 20);执行直接卡死,如何修改
你可以尝试以下几个方法来修改问题:
1.将函数参数中的 char* stringArray[] 改为 const char* stringArray[],并将调用函数时的参数 (char **)gcszOnOff 改为 (const char **)gcszOnOff。这样可以避免类型转换错误导致的卡死问题。
2.检查 LCD_DisString_Not 和 LCD_DisString 函数的实现是否存在问题,是否有可能导致程序卡死。如果有,需要修复这些函数。
3.检查变量 i 的定义和赋值是否正确,是否会导致数组越界的问题。如果存在问题,需要修复这些问题。
4.使用调试工具或者打印调试信息来定位问题,找到程序卡死的具体原因,并进行修正。
希望这些方法可以帮助你解决问题。如果问题仍然存在,可以提供更多的代码信息和错误提示,以便更好地帮助你解决问题。
void LCD_DisString(int x, int y, char pStr) { char GB_Str[128]; int outlen; memset(GB_Str,0,sizeof(GB_Str)); int inlen = strlen(pStr); if ((inlen <= 0) || (inlen > 240)) return; utf8ToGbk(pStr,inlen,GB_Str,&outlen); Lcd_DispStringOrgin(x,y,0,GB_Str); } void displayString(int isDraw, float val,const char stringArray[], int x, int y) { (isDraw ? LCD_DisString_Not(x, y, (char *)stringArray[(int)val]) : LCD_DisString(x, y,(char *) stringArray[(int)val])); } const char gcszOnOff[][NEW_DEF_LEN] = {// 投入退出 { "退出" }, { "投入" } }; displayString(0, 1, (const char **)gcszOnOff, (i % 9) + 1, 20); 这段运行卡死,该怎么修改
这段代码有几个问题:
1. `LCD_DisString`函数的第三个参数应该是`char*`类型,而不是`char`类型。
2. 在`LCD_DisString`函数中,`pStr`参数应该是指针类型,而不是字符类型。需要在函数声明和定义中将其修改为`char* pStr`。
3. 在`displayString`函数中,`stringArray`参数应该是`const char* const*`类型,而不是`const char*`类型。可以将函数定义中的`const char stringArray[]`修改为`const char* const* stringArray`。
4. 在调用`displayString`函数时,第三个参数的类型应该是`const char* const*`,而不是`(const char **)`。可以将调用中的`(const char **)gcszOnOff`修改为`(const char* const*)gcszOnOff`。
修改后的代码如下:
```
void LCD_DisString(int x, int y, char* pStr) {
char GB_Str[128];
int outlen;
memset(GB_Str, 0, sizeof(GB_Str));
int inlen = strlen(pStr);
if ((inlen <= 0) || (inlen > 240)) return;
utf8ToGbk(pStr, inlen, GB_Str, &outlen);
Lcd_DispStringOrgin(x, y, 0, GB_Str);
}
void displayString(int isDraw, float val, const char* const* stringArray, int x, int y) {
(isDraw ? LCD_DisString_Not(x, y, (char*)stringArray[(int)val]) : LCD_DisString(x, y, (char*)stringArray[(int)val]));
}
const char gcszOnOff[][NEW_DEF_LEN] = {// 投入退出
{ "退出" },
{ "投入" }
};
displayString(0, 1, (const char* const*)gcszOnOff, (i % 9) + 1, 20);
```
阅读全文