簡體   English   中英

char數組的長度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM