关于 C 的 itoa() 和 char 数组问题(连接 LCD)

Issue with itoa() and char array in regards to C (interfacing an LCD)

尽量简短;我正在尝试对 LCD 进行编程以打印出一个整数变量(超过 1 位)。我正在尝试使用 itoa 函数来执行此操作,因为 LCD 采用 ASCII 字符。下面的代码在我想要的时候编译并打印 "Set Temp: " ,问题是它没有像我想要的那样打印出存储在 numberString 数组中的字符(数字)。 writeString 函数工作正常,但我不明白为什么它在 "Set Temp: " 之后不打印 int setTemp 的值。输出的只是:"Set Temp: ",光标悬空。

可能值得一提的是,光标悬在 LCD 上应该打印值的位置,表明它不只是打印一个空值,它根本不打印任何东西或等待东西。

对于任何格式不正确的问题,我深表歉意,我是新手。

void writeChar(unsigned char ch)
{
  lcd = ch;
  RS = 1;
  RW =0;
  E = 1;
  lcdDelay();
  E=0;
}

void writeString(char *stringToLcd)
{
  while(*stringToLcd > 0)
  {
    writeChar(*stringToLcd++);
  }
}



int changeTriggTemp(void)
{
  char numberString[4]; //buffer, -99 -> 99
  int setTemp = 50;

  clearDisplay();
  writeString("Set Temp: ");

  itoa(setTemp,numberString,10);
  lcdDelay();

  writeString(numberString);

  while(1); //placeholder before I return the int I want

}

如果您不定义函数原型,编译器可能会对它做出错误的假设,并错误地编写其使用代码。在引起您的注意后,我问了定义是什么,因为通常的定义(至少在 MSVC 中)是

char *itoa(int value, char *str, int radix);

这符合你自己对函数的使用,

itoa(setTemp, numberString, 10);

但是在仔细检查您的库头文件后,您说它定义了

itoa(char * buf, int val, int base);

换句话说,前两个参数调换了。由于 itoa() 不是 标准 函数,这是允许的,但您必须相应地调用它:

itoa(numberString, setTemp, 10);

(感谢@Eric,他的建议表明它很可能是 itoa 的错误)。