gpt4 book ai didi

c - 通过 USART 发送 c char* 时出现问题

转载 作者:行者123 更新时间:2023-11-30 19:42:42 27 4
gpt4 key购买 nike

我正在将十六进制字节转换为字符串,并通过 uart 将它们发送到我计算机上的终端。我收到奇怪的(几乎正确的)输出,但我不明白为什么。这一切都是在 AVR 中完成的。以下是相关代码片段:

while(true)
{
wan_usart_transmit_string(generateString());
}

生成字符串:

char *generateString()
{
char *c = "";
char d[5];
sprintf(d, "%02X", 0x61);
c = strcat(c, d);
return c;
}

wan_usart_transmit_string:

void wan_usart_transmit_string(char * data)
{
unsigned char c = *data;

while (c)
{
while (!(UCSR0A & (1 << UDRE0)));
UDR0 = c;
c = *(++data);
}
}

输出:61611611116111111116161161111611111111...等等...

generateString 方法最终会在循环缓冲区中向前查找多个位置,并将该位置之前的所有 ASCII 值连接成单个字符串,随后通过 USART 发送该字符串。所以现在看起来有点时髦。这只是一个测试片段,以确保它在动态运行之前正常运行。

最佳答案

您需要为要从generateString() 返回的字符串分配一些内存。

当前,您将 c char* c = "" 指向字符串文字,然后尝试写入它,从而导致未定义的行为。

使用malloc:

char *c = malloc(sizeof( *c )*10);
c[0] = '\0'; //nul terminate so you get an empty string
char d[5];
sprintf(d, "%02X", 0x61); //you can sprintf directly into c
c = strcat(c, d);
return c;

关于c - 通过 USART 发送 c char* 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31078588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com