นี่คือโปรแกรม C++ สำหรับแปลง string เป็น char array สามารถทำได้หลายวิธี
วิธีที่ 1: คัดลอกตัวต่อตัวด้วยลูป
อัลกอริธึม
- กำหนดค่าให้ char array
m - ลูป i = 0 ถึง sizeof(m)-1
- คัดลอก
m[i]ไปstr[i]และพิมพ์
โค้ดตัวอย่าง
#include <iostream>
#include <string.h>
using namespace std;
int main() {
char m[] = "Tutorialspoint";
string str;
str.resize(sizeof(m)); // จัดสรรพื้นที่
for(int i = 0; i < sizeof(m); i++) {
str[i] = m[i];
cout << str[i];
}
return 0;
}
วิธีที่ 2: ใช้ strcpy()
คัดลอกเนื้อหา string ไป char array ด้วย strcpy()
อัลกอริธึม
- กำหนดค่าให้ string
str - คัดลอกเนื้อหาไป char array ด้วย
strcpy()
โค้ดตัวอย่าง
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main() {
string str = "Tutorialspoint";
char c[str.size() + 1]; // +1 สำหรับ null terminator
strcpy(c, str.c_str());
cout << c << '\n';
return 0;
}
ผลลัพธ์
Tutorialspoint
วิธีที่ 3: ใช้ std::string::copy()
หลีกเลี่ยง strcpy() ซึ่งเป็น C-style ด้วย copy() ของ string
อัลกอริธึม
- กำหนดค่าให้ string
str - คัดลอกเนื้อหาไป char array ด้วย
copy() - เพิ่ม null terminator เอง
โค้ดตัวอย่าง
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Tutorialspoint";
char c[str.size() + 1];
str.copy(c, str.size() + 1);
c[str.size()] = '\0'; // สำคัญ: ต้องใส่ null terminator เอง
cout << c << '\n';
return 0;
}
ผลลัพธ์
Tutorialspoint
วิธีที่ 4 (แนะนำ): ใช้ c_str() หรือ data()
หากแค่ต้องการ pointer ไปยังข้อมูลแบบ null-terminated: ไม่ต้องคัดลอก หากไม่ต้องแก้ไขข้อมูลconst char* ptr = str.c_str(); // คืน const char* ที่มี \0 ท้าย
// หรือ
const char* ptr = str.data(); // C++11: คืน const char* (ไม่รับประกัน \0 ก่อน C++11)