แปลง C ++ string
ไปแถวถ่านเป็น straightorward สวยโดยใช้ฟังก์ชั่นของสตริงแล้วทำc_str
strcpy
อย่างไรก็ตามวิธีการทำตรงข้าม?
ฉันมีแถวถ่านชอบที่จะแปลงกลับไปที่:char arr[ ] = "This is a test";
string str = "This is a test
แปลง C ++ string
ไปแถวถ่านเป็น straightorward สวยโดยใช้ฟังก์ชั่นของสตริงแล้วทำc_str
strcpy
อย่างไรก็ตามวิธีการทำตรงข้าม?
ฉันมีแถวถ่านชอบที่จะแปลงกลับไปที่:char arr[ ] = "This is a test";
string str = "This is a test
คำตอบ:
string
ชั้นจะมีคอนสตรัคที่ใช้เป็นโมฆะสิ้นสุด C-สตริง:
char arr[ ] = "This is a test";
string str(arr);
// You can also assign directly to a string.
str = "This is another string";
// or
str = arr;
"hello world"
คืออาร์เรย์ ถ้าคุณใช้sizeof("hello world")
มันจะทำให้คุณมีขนาดของอาร์เรย์ (ซึ่งก็คือ 12) แทนที่จะเป็นขนาดของตัวชี้ (น่าจะเป็น 4 หรือ 8)
string
สร้างจะไม่ทำงานด้วยตัวอย่างเช่นสตริงอาร์กิวเมนต์ที่ส่งผ่านซึ่งประกาศว่าเป็นunsigned char * buffer
สิ่งที่พบได้บ่อยมากในไลบรารีไบต์จัดการ
std::string str(buffer, buffer+size);
แต่มันอาจจะดีกว่าถ้าคุณติดกับตัวอักษรstd::vector<unsigned char>
ในกรณีนั้น
str
คือไม่ได้เปลี่ยนฟังก์ชั่นที่นี่ มันเป็นชื่อของตัวแปรสตริง คุณสามารถใช้ชื่อตัวแปรอื่น ๆ (เช่นstring foo(arr);
) การแปลงจะกระทำโดยนวกรรมิกของ std :: string ที่เรียกว่า implicitly
วิธีแก้ปัญหาอื่นอาจมีลักษณะเช่นนี้
char arr[] = "mom";
std::cout << "hi " << std::string(arr);
ซึ่งหลีกเลี่ยงการใช้ตัวแปรพิเศษ
cout << "test:" + std::string(arr);
string aString(someChar);
หรือไม่
มีปัญหาเล็กน้อยในคำตอบที่ได้รับการโหวต กล่าวคืออาร์เรย์อักขระอาจมี 0 หากเราจะใช้ตัวสร้างกับพารามิเตอร์เดียวตามที่อธิบายไว้ข้างต้นเราจะสูญเสียข้อมูลบางส่วน ทางออกที่เป็นไปได้คือ:
cout << string("123\0 123") << endl;
cout << string("123\0 123", 8) << endl;
ผลลัพธ์คือ:
123
123 123
std::string
เป็นที่เก็บข้อมูลไบนารีและไม่แน่ใจว่าอาร์เรย์นั้นไม่มี '\ 0'
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
int main ()
{
char *tmp = (char *)malloc(128);
int n=sprintf(tmp, "Hello from Chile.");
string tmp_str = tmp;
cout << *tmp << " : is a char array beginning with " <<n <<" chars long\n" << endl;
cout << tmp_str << " : is a string with " <<n <<" chars long\n" << endl;
free(tmp);
return 0;
}
ออก:
H : is a char array beginning with 17 chars long
Hello from Chile. :is a string with 17 chars long
const char*
เพื่อให้คุณสามารถผ่านมันสตริงตัวอักษรหรืออาร์เรย์ถ่าน (ซึ่งสลายตัวไปที่)