char数组的长度

时间:2012-12-19 06:13:56

标签: c++

我有这样的代码:

#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(输出)但没有改变。我如何只获得使用的数组长度?

我正在使用VS C ++ 6.0

3 个答案:

答案 0 :(得分:2)

阵列上的

sizeof运算符为您提供为数组分配的大小,即10 您需要使用strlen()来了解数组内部占用的长度,但是需要确保数组被终止

使用C ++更好的替代方法是简单使用: std::string 而不是字符数组。然后,您只需使用 std::string::size() 即可获得尺寸。

答案 1 :(得分:0)

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

至少按照现行标准,您的代码存在一些非常严重的问题。看起来它是为在MS-DOS上运行的1993编译器编写的,或者是该命令中的某些东西。对于当前的编译器,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();
}

答案 2 :(得分:0)

您使用的getline无格式输入功能,因此您可以检索使用input.gcount()提取的字符数。

请注意,\e不是标准转义序列,字符常量\eof几乎肯定不会按照您的想法执行。如果您不想识别任何分隔符,则应使用read,而不是getline,传递缓冲区的大小,以免溢出。