我有这样的代码:
#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
答案 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
,传递缓冲区的大小,以免溢出。