簡體   English   中英

如何使用C字符串並避免C ++溢出

[英]How to use c-strings and avoid overflow c++

如何使用C字符串並避免溢出? 例如,如果我有代碼:

#include <iostream>
using namespace std;

int main()
{
    int size = 1000;
    char * name = new char[size];
    getline(cin, name);
}

我不知道此人的名字將持續多久,那么如何避免出現溢位? 如果我為預防措施分配了1000個字符,則他們可以輕松輸入1001個字符。 我該怎么做才能阻止這種情況的發生?

編輯:我必須能夠在沒有字符串類的情況下執行此操作

有一個std::getline()版本,它接受std::string作為目標緩沖區。 它旨在利用std::string的自動調整大小功能並防止溢出。 來自std :: getline聯機幫助頁的示例:

#include <string>
#include <iostream>

int main()
{
    // greet the user
    std::string name;
    std::cout << "What is your name? ";
    std::getline(std::cin, name);
    std::cout << "Hello " << name << ", nice to meet you.\n";
}

除了您所要求的安全性之外, std::string還為您提供自動內存管理-因此您無需記住delete任何內容,這在您的示例中是必需的。


如果不允許使用std::string ,則可以使用std::basic_istream::getline ,它有兩種形式:

basic_istream& getline( char_type* s, std::streamsize count );
basic_istream& getline( char_type* s, std::streamsize count, char_type delim );

它允許您指定要讀取的最大字符數和可選的定界符。 std::basic_istreamstd::istream的基類。 此類的一個非常流行的實例是std::cin

因此,基本上,您可以執行以下操作:

char target[64];
std::cin.getline(target, 64);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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