如何从c中的char *访问char []?

时间:2017-04-22 00:12:56

标签: c arrays pointers arduino char

我正在用C编程Arduino板,因此除非我与外部终端窗口进行串行通信,否则无法打印。

因此我开发了一个printAll方法:

void printAll(char * str) {
  int i;
  for(i = 0; str[i] != 0x00; i++) {
    PSerial_write('0', str[i]);
  }
}

我也有一个变量:

char input[12];
input[0] = 'h';
input[1] = 'e';
input[2] = 'l';
input[3] = 'p';

我想要做的是将此数组传递给printAll方法(但printAll方法接受char *)。

我试过这样做:

printAll(&input[0]);

但没有打印出来!但当我单步执行并打印输入数组的每个字符时,我得到:

help<0><0><0><0><0><0><0><0>

任何人都可以解释为什么这不起作用?谢谢!

***注意:printAll方法在使用时完全正常:

printAll("Hello World!");

整体而言,我的代码如下:

char input[12];

int main(void) {
  start();
}

void start() {
  while(1) {
    printAll("Please enter in a command!\r");
    printAll("Please type 'help' for instructions!\r");
    char input[12];
    readInput(input);
    printAll("Trying to print the char array stuff....\r");
    printAll(input);
    if (input == "help") printHelp();
    else if (input == "set") {
      if (setStatus) printSet();
      else printAll("Controller not authorized to print.\n");
    }
    else if (input == "set on") setStatus = true;
    else if (input == "set off") setStatus = false;
    else if (input == "set hex=on") hexFormat = true;
    else if (input == "set hex=off") hexFormat = false;
    else if (input == "set tlow") tlow = getNumber(input);
    else if (input == "set thigh") thigh = getNumber(input);
    else if (input == "set period") period = getNumber(input);
    x_yield();
  }
}

void readInput() {
  char c = PSerial_read('0'); //reads character from user
  while (c != '\r') {
    //while the character isnt 'enter'
    input[currIndex] = c;
    c = PSerial_read('0');
    currIndex++;
  }
  int y;
  for(y = 0; y < 12; y++) {
    PSerial_write('0', input[y]);
    //go through input and print each character
  }
  PSerial_write('0', '\r');
  //add new line to print log
  currIndex = 0; //reset for next input (overwrites current stuff)
}

现在无论我输入什么,它只是要求更多输入,并且在输入方法返回后永远不会打印出数组。

2 个答案:

答案 0 :(得分:2)

您发送的代码是混合的,无法编译。代码表明你有两个输入变量,一个是全局的,一个是局部的。 readInput()读取全局值,printAll()读取本地值(反之亦然,具体取决于更改的代码)。删除不应该使用的全局输入,并将相同的输入变量传递给readInput()和printAll()。

答案 1 :(得分:1)

我对Arduinos一无所知,所以请耐心等待。

readInput函数中,您没有包含input数组的任何参数,这意味着您正在使用在代码开头声明的全局变量这个功能。但是,在start函数中,您声明了另一个input数组并将其传递给readInput,即使该函数没有接受任何参数。

这个新input实际上会隐藏&#34;声明它的函数的全局input变量。这意味着start使用此本地input,即使readInput使用全局input。换句话说,你实际上使用了两个不同的变量,而不是一个。

要解决此问题,请尝试删除char input[12]中的start,或删除代码开头的全局char input[12],并将其添加为{{1}的参数}:readInput

注意:即使您没有在void readInput(char * input)中包含任何参数,如果传递参数,C编译器也不会抱怨,除非您放置readInput在括号中:void