为什么Linux中的空间会丢失空间?

Jay*_*man 0 c++ pipe

我在Linux中遇到管道问题.管道后看起来空格字符丢失了.运行以下C++代码

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main(){
    char s[] = "ab cd", c;
    int n = strlen(s);
    for(int i = 0; i<n && (cin >> c); i++)
        if(s[i] != c){
            printf("wrong at %d : '%c' != '%c' \n", i, s[i], c);
            break;
        }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

echo "ab cd" | ./checker
Run Code Online (Sandbox Code Playgroud)

shell命令给出

wrong at 2 : ' ' != 'c'
Run Code Online (Sandbox Code Playgroud)

这是正常的行为吗?如何避免丢失管道中的字符?

Mat*_*son 5

问题不在于管道,问题是cin >> c跳过空白.

如果你这样做会有用 cin >> noskipws >> c

或类似的东西:

std::string q;
getline(cin, q);

for(i = 0; i < n && i < q.size(); i++)
{
  if (q[i] != s[i]) 
    ...
}
Run Code Online (Sandbox Code Playgroud)