我有一些用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();
,但输出中没有任何内容。
答案 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;