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;
}

我想打印输出的长度。但它总是返回数字 10(给定长度),即使输入文件只有 2 个字母(就像“ab”一样)。我也使用过 strlen(output) 但没有任何改变。我如何只获得数组的使用长度?

我正在使用 VS C++ 6.0

4

3 回答 3

2

sizeof数组上的运算符为您提供为数组分配的大小,即10.
您需要strlen()知道数组中占用的长度,但您需要确保数组为空终止

使用 C++ 更好的选择是简单的使用:std::string而不是字符数组。然后你可以简单地使用std::string::size()来获取大小。

于 2012-12-19T06:17:20.617 回答
0

sizeof总是根据对象的类型打印定义的对象大小,而不是字符串的长度。

至少按照目前的标准,您的代码存在一些非常严重的问题。看起来它是为 1993 年在 MS-DOS 上运行的编译器编写的,或者按此顺序编写的。使用当前的编译器,C++ 头文件最后不应该有.h,除其他外。

#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, not getline,传递缓冲区的大小,以免溢出。

于 2012-12-19T06:48:05.840 回答