缓冲区中的垃圾字符

时间:2012-10-27 13:04:26

标签: c++ linux

我有这个功能。

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为“long”,则DemoInput变为“LONG \\ r”

我想过使用正则表达式(“[:upper:]”),但认为必须有一种更简单的方法来做到这一点。 我发现posix正则表达式比python正则表达式更复杂。

2 个答案:

答案 0 :(得分:2)

如果您只需要前5个字符,请不要复制整个buf。那只是浪费空间和时间。此外,您不应该通过telnet控制字符\r复制任何内容。

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

答案 1 :(得分:1)

为什么不更改为演员函数提供buf的代码。追加&#39; \ 0&#39;尽管它可能不会被终止,但是表示字符串的结尾。