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);执行直接卡死,如何修改
时间: 2024-04-27 19:25:02 浏览: 12
你可以尝试以下几个方法来修改问题:
1.将函数参数中的 char* stringArray[] 改为 const char* stringArray[],并将调用函数时的参数 (char **)gcszOnOff 改为 (const char **)gcszOnOff。这样可以避免类型转换错误导致的卡死问题。
2.检查 LCD_DisString_Not 和 LCD_DisString 函数的实现是否存在问题,是否有可能导致程序卡死。如果有,需要修复这些函数。
3.检查变量 i 的定义和赋值是否正确,是否会导致数组越界的问题。如果存在问题,需要修复这些问题。
4.使用调试工具或者打印调试信息来定位问题,找到程序卡死的具体原因,并进行修正。
希望这些方法可以帮助你解决问题。如果问题仍然存在,可以提供更多的代码信息和错误提示,以便更好地帮助你解决问题。
相关问题
void displayString(int i, int isDraw, float val, 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(i, isDraw, val, gcszOnOff, (i % LISTOFFSET) + 1, 20); 这样调用编译器提示note: expected 'const char **' but argument is of type 'const char (*)
这个编译器提示的意思是,`displayString` 函数的第四个参数应该是一个 `const char **` 类型的指针,但是实际传入的是一个 `const char (*)[]` 类型。这是因为 `gcszOnOff` 是一个二维字符数组,它被定义为 `const char gcszOnOff[][NEW_DEF_LEN]`,表示它的每个元素都是一个长度为 `NEW_DEF_LEN` 的字符数组,而不是一个指向字符数组的指针。
要解决这个问题,可以将 `gcszOnOff` 数组定义为一个指向指针的指针,例如:
```
const char* gcszOnOff[] = { "退出", "投入" };
const char** pGcszOnOff = gcszOnOff;
```
然后将 `pGcszOnOff` 作为参数传递给 `displayString` 函数,就可以避免编译器提示的问题,例如:
```
displayString(i, isDraw, val, pGcszOnOff, (i % LISTOFFSET) + 1, 20);
```
或者,可以修改 `displayString` 函数的声明,将第四个参数的类型改为 `const char (*)[]`,例如:
```
void displayString(int i, int isDraw, float val, const char (*stringArray)[NEW_DEF_LEN], int x, int y) {
(isDraw ? LCD_DisString_Not(x, y, (char *)stringArray[(int)val]) : LCD_DisString(x, y, (char *)stringArray[(int)val]));
}
```
然后就可以使用原来的代码调用 `displayString` 函数了。
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(isDraw, val, (char **)gcszOnOff, (i % 9) + 1, 20); 这样调用为什么执行卡死
这段代码存在多个变量未定义或未赋值,无法判断具体原因。你需要检查这些变量的定义和赋值是否正确,例如 isDraw, val, stringArray 等。同时,也需要检查其他相关代码是否存在问题,例如函数调用的参数是否正确等。建议你先逐行检查代码,找到问题所在。如果问题仍无法解决,可以提供更多代码信息或者具体错误提示,以便更好地帮助你解决问题。