c-将一系列字符存储在char数组中,每次一个



我正在AVR中实现USART通信。下面的函数应该接收字符并将其存储在主函数中定义的字符数组中。

void readString(uint8_t string[], uint8_t maxLength)
{
uint8_t idx = 0;
uint8_t data;
while(idx < (maxLength-1))      // prevent overruns
{
data = getByte();   
transmitByte(data);         // echo the received characters 
if(data == 'n') break;     // check if enter key is pressed
else{
string[idx] = data;
idx++;
}   
}
string[idx] = 0;                // insert a null character
}

以下是主要功能:

int main(){
initUSART();        // initialize usart 

uint8_t* newString = "Hello";  // test string
uint8_t mString[55];    // store the received characters
readString(mString, 55);    // read array of characters
for(;;){
transmitString(newString);
_delay_ms(DELAY);
}
return 0;

}

然后,禁止以下功能将接收到的字符阵列发送回USART线路

void transmitString(uint8_t* string){
uint8_t i;
uint8_t len = sizeof(string);
for(i=0; i<len; i++){
transmitByte(string[i]);
}
}

问题是trannsmitString函数没有任何可发送的内容。我知道我的readString函数没有将字符保存到主函数中声明的mString数组中。getByte函数工作正常。我可以接收和发送单个字符,但不能发送字符串。我只能一个接一个地回显接收到的字符。我在将这些字符插入数组以进行进一步操作时遇到问题。使用已经声明的字符串,测试字符串,函数可以很好地传输。

请帮我解决这个问题。

uint8_t len = sizeof(string);没有做你认为它正在做的事情。这里的len将保持string指针的大小(即,它与sizeof(uint8_t*)相同(,而不是传递的数组的大小。您需要将长度作为一个额外的函数参数来传递,以获得所需的内容。

最新更新