如何修复c++字符转换

How to fix C++ char converting?

本文关键字:转换 字符 c++ 何修复      更新时间:2023-10-16

我有一个用c++写的函数:

#include ...
char read_somthing()
{
    int n = 0, spot = 0;
    char buf = '';
    char response[13];
    memset(response, '', 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; 
}

问题是,第一个cout工作并打印真实值,但第二个返回空行,我认为它与主函数中的第二行有关,我该如何修复它?

PS:我注释掉了cout << read_somthing();,但没有出现在输出中。

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

这类似于初始化和赋值。在c语言中是允许的,但在c++中会给出不同的结果

第一个依赖于初始化,第二个依赖于赋值。在c++中,这些操作是可重载的,因此可能导致不同的结果。

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

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