[英]Length of a char array
我有這樣的代碼:
#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
數組上的sizeof
運算符為您提供為數組分配的大小,即10
。
你需要使用strlen()
來知道數組內部占用的長度,但是你需要確保數組是空終止的 。
使用C ++更好的替代方法是簡單使用: std::string
而不是字符數組。 然后你可以簡單地使用std::string::size()
來獲取大小。
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();
}
您正在使用的getline
是一個未格式化的輸入函數,因此您可以檢索使用input.gcount()
提取的字符數。
請注意\\e
不是標准的轉義序列,字符常量\\eof
幾乎肯定不會按照您的想法執行。 如果你不想識別任何分隔符,你應該使用read
而不是getline
,傳遞緩沖區的大小,這樣你就不會溢出它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.