簡體   English   中英

C ++中seekp(...)的奇怪行為

[英]Strange behaviour of seekp(…) in C++

我有以下代碼:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    fstream in("test.txt");
    in.seekp(10);

    string testStr;
    in >> testStr;
    cout << testStr;

    return 0;
}

文件“ test.txt”包含以下文本:

1
2
3
4
5
6
7
8
9
10

當我在Windows上編譯該代碼並運行時,我得到的輸出= 5,當我在Linux Mint 17上編譯該代碼並運行時,我得到的輸出= 6。

為什么?

這只是一個猜測,但是在Windows編輯器中,趨向於將換行符寫為兩個字符: \\n\\r ,而在Linux中,它只是\\n 因此,您可以在Windows中看到文件為:

1\n\r
2\n\r
3\n\r
4\n\r
5\n\r

在Linux中

1\n
2\n
3\n
4\n
5\n
6\n

因此,在Windows中,將搜尋器移動到10會將其放在\\n在4之后,從而接下來提取5。 在Linux中,搜尋器將繼續執行6,從而將其提取。 要測試我的猜測是否正確,請嘗試將Windows文件復制到Linux,反之亦然。

當您指定10個字節時,Linux的換行符(\\ n)和Windows的回車符(\\ r)+換行符(\\ f)將被計算在內。 在Windows上,請嘗試以下操作:

in.seekp(10*3);

同樣,在Linux中,

in.seekp(10*2);

但是,如果您讀了整行10次並丟棄了更好的輸入,以防萬一每行有一個以上的字符,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM