[英]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_istream
是std::istream
的基類。 此類的一個非常流行的實例是std::cin
。
因此,基本上,您可以執行以下操作:
char target[64];
std::cin.getline(target, 64);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.