3

私はこのようなコードを持っています:

#include <iostream.h>
#include <fstream.h>
void main()
{
    char dir[25], output[10],temp[10];
    cout<<"Enter file: ";
    cin.getline(dir,25);           //like C:\input.txt
    ifstream input(dir,ios::in);
    input.getline(output,'\eof');
    int num = sizeof(output);
    ofstream out("D:\\size.txt",ios::out);
    out<<num;
}

出力の長さを印刷したい。ただし、入力ファイルの文字数が2文字しかない場合でも(「ab」のように)、常に数値10(指定された長さ)が返されます。strlen(output)も使用しましたが、何も変更されていません。使用されている配列の長さだけを取得するにはどうすればよいですか?

VS C++6.0を使用しています

4

3 に答える 3

2

sizeof配列の演算子は、配列に割り当てられたサイズを提供します10。配列内で占有されている長さを知る
ために使用する必要がありますが、配列が null で終了していることを確認する必要がありますstrlen()

std::stringC++ では、文字配列の代わりに単純に使用することをお勧めします。次に、単に使用std::string::size()してサイズを取得できます。

于 2012-12-19T06:17:20.617 に答える
0

sizeof文字列の長さのようなものではなく、その型に基づいてオブジェクトの定義されたサイズを常に出力します。

少なくとも現在の基準では、コードにはかなり深刻な問題がいくつかあります。MS-DOS で動作する 1993 年のコンパイラ、またはその順序で書かれたようです。.h現在のコンパイラでは、とりわけ、C++ ヘッダーが最後にあるべきではありません。

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::string dir, output, temp;

    std::cout<<"Enter file: ";
    std::getline(cin, dir);           //like C:\input.txt
    std::ifstream input(dir.c_str());
    std::getline(input, output);
    std::ofstream out("D:\\size.txt");
    out<<output.size();
}
于 2012-12-19T06:22:35.797 に答える
0

使用getlineしている はフォーマットされていない入力関数であるため、 で抽出された文字数を取得できますinput.gcount()

\eこれは標準のエスケープ シーケンスではなく、文字定数\eofはほぼ確実に、あなたが思っているようなことをしないことに注意してください。区切り文字を認識したくない場合は、オーバーフローしないようにバッファーのサイズを渡して、readではなくを使用する必要があります。getline

于 2012-12-19T06:48:05.840 に答える