如何修复C ++ char转换?

时间:2015-09-02 13:08:39

标签: c++

我有一些用C ++编写的函数:

#include ...

char read_somthing()
{
    int n = 0, spot = 0;
    char buf = '\0';

    char response[13];
    memset(response, '\0', sizeof response);

    do {
        n = read( fd, &buf, 1 );
        sprintf( &response[spot], "%c", buf );
        spot += n;
    } while( buf != '\r' && n > 0);
    cout << "Response: " << response << endl;
    return buf; 
}

void main()
{
   cout << read_somthing();
   char response = read_somthing();
   cout << response; 
}

问题是,First cout工作并打印真值,但第二个返回空行,我认为它与main函数中的第二行有关,我该如何解决?

PS:我注释掉cout << read_somthing();,但输出中没有任何内容。

3 个答案:

答案 0 :(得分:0)

您的read_somthing正在读取输入中的字符并返回该字符的副本。第二次调用read_somthing时,输入流已经移动到1个字符之前,如果输入是1个字符,那么读取另一个字符将不会产生任何结果。

答案 1 :(得分:0)

这类似于初始化和分配。 在c中它是允许的但是在c ++中它会给出不同的结果

第一个依赖于初始化,而第二个依赖于 - 在分配时。在C ++中,这些操作过载,因此可能导致不同的结果。

答案 2 :(得分:0)

您正在返回buf变量,这是单个字符。当do {} while()循环退出时,buf包含\r(或read失败时的垃圾),这将不会显示在控制台输出上。

您可能希望返回在response中收集的数据。要缓解数据分配等问题,只需使用std::string - 将返回类型更改为read_something,将最后一行更改为return response;