缓冲区中的垃圾字符

garbage characters in buffer

本文关键字:字符 缓冲区      更新时间:2023-10-16

我具有此功能。

void cast(char *buf)
{
    string str(buf);
    string  s=str.substr(0,5);
    std::transform(s.begin(), s.end(), s.begin(),::toupper);
    DemoInput=s;
}

*buf是客户发送的消息。我试图传达该消息,无论它将其剥离多长时间,都可以使其大写。如果消息> 5,则有效,但如果消息<5然后在其中有垃圾字符。例如:如果BUF为"长",则Demoinput变为"长\ r"

我考虑使用REGEX(" [:upper:]"),但认为必须有一种更简单的方法来执行此操作。我发现Posix Regex比Python Regex更复杂。

如果您只需要前5个字符,请不要复制整个buf。这只是浪费了空间和时间。另外,您不应将任何内容复制到telnet控制字符r

void cast(char *buf)
{
    size_t len = 0;
    while (len < 5 && buf[len] != '' && buf[len] != 'r') {
        ++len;
    }
    string s(buf, len);
    std::transform(s.begin(), s.end(), s.begin(),::toupper);
    DemoInput=s;
}

为什么不更改将BUF提供的代码更改为铸件功能。附加' 0'表示字符串的末端,因为它听起来可能不会终止。