C - 双字符数组解析 - 要解析的 int 似乎无缘无故地修改了自己

标签 c arrays parsing

我正在尝试检查/显示我按下的是哪个按钮,有人告诉我专门使用双字符数组。

使用下面的代码我得到了这个输出:1 7 8 9 10 11 MuteRec LockPlay 并且 lcd 不会自行刷新以不写入任何内容。

int displayButton(int buttonActivated)
{
    int parse = 0;
    char buttonNameArray[21][4] = {
        {"1   "},{"2   "},{"3   "},{"4   "},
        {"5   "},{"6   "},{"7   "},{"8   "},
        {"9   "},{"10  "},{"11  "},{"12  "},
        {"13  "},{"14  "},{"15  "},{"16  "},
        {"Mute"},{"Rec "},{"Lock"},{"Play"},
        {"    "}
    };

    for(parse = 0; parse < 3; parse++)
    {
        DRV_HD44780_putString(16 + parse, 1, &buttonNameArray[buttonActivated][parse]);
    }
    return(21);
}

void testKeyboardTask()
{
    int nbButton = 0;
    int buttonActivated = 21;

    while(1)
    {
        DRV_KEYBOARD_readKeyboard();
        int buttonId;
        for (buttonId=0;buttonId<20;buttonId++)
        {
            if (buttonStateArray[buttonId] == 1 && nbButton < 20)
            {
                buttonActivated = buttonId;
                nbButton++;
            }
        }
        if(nbButton > 1)
        {
            DRV_HD44780_putString(0, 3, "Error Multiple Press");
            osDelay(1000);
            DRV_HD44780_putString(0, 2, "                    ");
        }
        else
            buttonActivated = displayButton(buttonActivated);

        nbButton = 0;
    }
 }

似乎 buttonActivated 随着时间的推移而变化(给自己加 6)。 我不明白为什么我会得到这个输出(我是 c 的新手)并且有一个开关它工作得很好,

如果有人能明白为什么

最佳答案

正如每个人所说,我只是忘记了 NULL 终止符,因为 4 个字符不足以容纳它。

谢谢大家

关于C - 双字符数组解析 - 要解析的 int 似乎无缘无故地修改了自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51038909/

相关文章:

java - Java 中类的问题

字符串赋值

c - 每次迭代都会替换索引中的值

c++ - 是 int a[10]={0,1,2,3,4,5,6,7,8,9};与 C++ 中的 int *a={0,1,2,3,4,5,6,7,8,9} 相同吗?

javascript - Array.includes 始终为 false javascript

python - 删除 array([]) 括号为矩阵方程创建干净的数组

将 scala 中的字符串解析为自定义案例对象

regex - 这个 perl6 语法是坏了,还是暴露了一个错误?

c - 通过串口读写二进制数据

c - 字符串中的大写字符无法转换为小写字符,并且减去它们的 ASCII 值不会使它们出现在字母索引中