This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 字符串与堆栈问题

Guru**** 2595805 points
Other Parts Discussed in Thread: EK-TM4C1294XL

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/969430/string-vs-stack-problem

Thread 中讨论的其他器件:EK-TM4C1294XL

我有 EK-TM4C1294XL,但这可能是一个一般的 C 代码问题,如果我进入该板,我就会被锁定在板论坛上发布!?

我通过 UDP 接收命令字符串。 处理完命令后、我返回一个字符串、该字符串包含许多在新字符串中拼接在一起的元素。

或者、如果出现未知命令或某些转换错误、我将返回非确认(NAC)。

我以某种方式遇到了一个问题。 如果返回字符串太长、堆栈上的返回地址将被覆盖!

如果返回字符串足够短、则一切都适用于数千条命令!

void ACK (char Cmd[]、char answ[])
{
字符 res[]="0";

strcat (res、Cmd);
strcat (res、");
strcat (res、answ);//如果 res 字符串结束太长,则返回地址被覆盖!

udp_server_send (res);
}


void udp_incomming (void * arg、struct udp_PCB * PCB、struct pbuf * p、struct ip_addr * addr、u16_t port)
{
字符命令[25];
字符 cat[5]、SweepParam[9];
char answe[]="---";
char b[10];
无符号短整型 c;
int a、i、j;
uint32_t Cardinal;

if (p!= NULL){
memcpy (命令、p->payload、p->len);
Command[p->len]=0;
memcpy (catch、Command、4);
cat[4]='\0';
ConvertError=false;

//catch 是一个短字符串,用于确定我收到了哪个命令

---

IF (转换错误)
NAC (命令);
其他
ACK (命令,应答);

}

pbuf_free (p);
}

在 C 语言方面、我并不是都受过良好的教育、但我应该在堆栈上留出更多空间、或者也许可以开始使用指针。

但所有这些“大”的东西对我来说还是相当陌生的!

如何继续?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    将 Ack 例程更改为:

    void ACK (char Cmd[]、char answ[])
    {
    字符 res[50]="0";
    
    strcat (res、Cmd);
    strcat (res、");
    strcat (res、answ);//如果 res 字符串结束太长,则返回地址被覆盖!
    
    udp_server_send (res);
    }
    
    

    。 显然可以解决问题。 我不希望返回长度超过30个字符的字符串。

    但是,这是我们要做的事情吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、这就是实现它的方法。 在第一个示例中、res 将仅与初始化字符串一样长。

    Cmd 和 answ 是否正确终止为'\0'?

    是否要发送您在 res 字符串中输入的"0"? 或者、这是为了作为一个微端接器来指示灯串的末端吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、"0"(char 0x30)用于指示命令确认。 在 NAC 响应中,我在开始时输入了一个“1”。

    和参数字符串均为空端接、结果 RES 也是如此。