Jawaban:
The string
kelas memiliki konstruktor yang mengambil C-string NULL-dihentikan:
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"
adalah array. Jika Anda menggunakannya sizeof("hello world")
akan memberi Anda ukuran array (yaitu 12), daripada ukuran pointer (kemungkinan 4 atau 8).
string
konstruktor tidak akan bekerja dengan, misalnya, argumen string berlalu dinyatakan sebagai unsigned char * buffer
, sesuatu yang sangat umum dalam menangani aliran byte perpustakaan.
std::string str(buffer, buffer+size);
tetapi mungkin lebih baik untuk tetap menggunakan std::vector<unsigned char>
dalam kasus itu.
str
adalah tidak seorang mualaf-fungsi di sini. Ini adalah nama variabel string. Anda dapat menggunakan nama variabel lainnya (mis string foo(arr);
.). Konversi dilakukan oleh konstruktor std :: string yang disebut secara implisit.
Solusi lain mungkin terlihat seperti ini,
char arr[] = "mom";
std::cout << "hi " << std::string(arr);
yang menghindari menggunakan variabel tambahan.
cout << "test:" + std::string(arr);
string aString(someChar);
?
Ada masalah kecil yang terlewat dalam jawaban terpilih. Yaitu, array karakter dapat berisi 0. Jika kita akan menggunakan konstruktor dengan parameter tunggal seperti yang ditunjukkan di atas, kita akan kehilangan beberapa data. Solusi yang mungkin adalah:
cout << string("123\0 123") << endl;
cout << string("123\0 123", 8) << endl;
Output adalah:
123
123 123
std::string
sebagai wadah untuk data biner dan tidak dapat memastikan bahwa array tidak mengandung '\ 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;
}
DI LUAR:
H : is a char array beginning with 17 chars long
Hello from Chile. :is a string with 17 chars long
const char*
, sehingga Anda bisa meneruskannya dengan string literal atau char array (yang meluruh ke sana).