এর মাধ্যমে std::stringপুনরুদ্ধার করা ডেটা সঞ্চয় করতে আমার একটি ব্যবহার করা দরকার fgets()। রূপান্তর করতে এই আমি প্রয়োজন কাজের জন্য char*ফেরত মান থেকে fgets()একটি মধ্যে std::stringএকটি অ্যারের মধ্যে দোকান থেকে। কিভাবে এই কাজ করা যেতে পারে?
এর মাধ্যমে std::stringপুনরুদ্ধার করা ডেটা সঞ্চয় করতে আমার একটি ব্যবহার করা দরকার fgets()। রূপান্তর করতে এই আমি প্রয়োজন কাজের জন্য char*ফেরত মান থেকে fgets()একটি মধ্যে std::stringএকটি অ্যারের মধ্যে দোকান থেকে। কিভাবে এই কাজ করা যেতে পারে?
উত্তর:
std::string এর জন্য একজন কনস্ট্রাক্টর রয়েছে:
const char *s = "Hello, World!";
std::string str(s);
নোট করুন যে এটি চরিত্রের তালিকার গভীর অনুলিপিগুলি তৈরি করে sএবং sহওয়া উচিত নয় nullptr, অন্যথায় আচরণটি সংজ্ঞায়িত।
strকেবল একটি পরিবর্তনশীল নাম। এটা তোলে কিছু হতে পারে: S, abc, l, I, strHelloWorld। স্পষ্টতই কিছু পছন্দ অন্যদের চেয়ে ভাল। তবে এই উদাহরণটি strবেশ গ্রহণযোগ্য।
আপনি যদি ইতিমধ্যে চর * এর আকার জানেন তবে পরিবর্তে এটি ব্যবহার করুন
char* data = ...;
int size = ...;
std::string myString(data, size);
এটি স্ট্রেন ব্যবহার করে না।
সম্পাদনা: স্ট্রিং ভেরিয়েবল ইতিমধ্যে বিদ্যমান থাকলে, এসাইন্ট () ব্যবহার করুন:
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
বেশিরভাগ উত্তর নির্মাণ সম্পর্কে আলোচনা করে std::string।
যদি ইতিমধ্যে নির্মিত হয়, কেবল অ্যাসাইনমেন্ট অপারেটর ব্যবহার করুন ।
std::string oString;
char* pStr;
... // Here allocate and get character string (e.g. using fgets as you mentioned)
oString = pStr; // This is it! It copies contents from pStr to oString
এটি নির্মাণকারীর মাধ্যমে প্রবেশ করুন:
const char* dat = "my string!";
std::string my_string( dat );
আপনি অন্যভাবে যেতে স্ট্রিং.আর.সি. (() ফাংশনটি ব্যবহার করতে পারেন:
std::string my_string("testing!");
const char* dat = my_string.c_str();
c_str()ফিরেconst char*
const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;
আমি একটি নতুন পদ্ধতি উল্লেখ করতে চাই যা ব্যবহারকারীর সংজ্ঞায়িত আক্ষরিক ব্যবহার করে s। এটি নতুন নয়, তবে এটি আরও সাধারণ হবে কারণ এটি সি ++ 14 স্ট্যান্ডার্ড লাইব্রেরিতে যুক্ত করা হয়েছিল।
সাধারণ ক্ষেত্রে অতিরিক্ত পরিমাণে অতিরিক্ত:
string mystring = "your string here"s;
তবে এটি আপনাকে প্রশস্ত স্ট্রিং সহ অটোও ব্যবহার করতে দেয়:
auto mystring = U"your UTF-32 string here"s;
এবং এখানেই এটি সত্যই জ্বলে উঠেছে:
string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;
আমি ঠিক std::string(char*)শীর্ষ-উত্তরের উত্তরের মতো কনস্ট্রাক্টরটি ব্যবহার করতে এমএসভিসি ২০০৫ এর সাথে লড়াই করছি । যেহেতু আমি এই রূপটি সর্বদা-বিশ্বস্ত http://en.cppreferences.com/w/cpp/string/basic_string/basic_string এ # 4 হিসাবে তালিকাভুক্ত দেখতে পাচ্ছি , আমি পুরানো সংকলকও এটিকে প্রস্তাব দিচ্ছি।
আমাকে বুঝতে এত দীর্ঘ সময় লেগেছে যে এই নির্মাতা নিখুঁত (unsigned char*)একটি যুক্তি হিসাবে মেলাতে অস্বীকার করেছে ! std::stringআর্গুমেন্টের ধরণের সাথে মেলে ব্যর্থতা সম্পর্কে আমি এই বোধগম্য ত্রুটি বার্তাগুলি পেয়েছি , যা আমি লক্ষ্য রেখেছিলাম তা অবশ্যই ছিল না। std::string((char*)ucharPtr)আমার সমস্যা সমাধানের সাথে যুক্তিটি সরাচ্ছি ... ডু!
char* data;
std::string myString(data);
dataঅবিচ্ছিন্ন (খালি) থেকে যায়।
নিশ্চিত না কেন এরিক ব্যতীত অন্য কেউ এটি উল্লেখ করেছেন না, তবে এই পৃষ্ঠা অনুসারে , অ্যাসাইনমেন্ট অপারেটর ঠিক ঠিক কাজ করে। কোনও কনস্ট্রাক্টর, .assign (), বা .append () ব্যবহার করার দরকার নেই।
std::string mystring;
mystring = "This is a test!"; // Assign C string to std:string directly
std::cout << mystring << '\n';
=(এবং +=) এর ভিতরে "নতুন" থেকে উত্সাহিত করার বিষয়টি নিয়ে সমস্যা শুরু করি । এটি এরকম আক্ষরিক সাথে ঘটবে বলে মনে হয় না, তবে কেবল char*জিনিসগুলির সাথে। এই জাতীয় রিপোর্টগুলি আসলে ফাঁস কিনা তা নিয়ে এখানে আলোচনা করা হয়েছে । তবে আমি যদি destString = std::string(srcCharPtr);ভ্যাসগ্রাইন্ডের জন্য অ্যাসাইন পরিবর্তন করি তবে লিক রিপোর্টগুলি চলে যায়। YMMV।
Constructs an object of class basic_string and determines its initial string value from the array। এটি বাফার বা পয়েন্টারের মালিকানা সম্পর্কে মান এবং কিছুই বলে না।