Buat string baru dari yang lama

Saya menggunakan C++ (lingkungan Windows). Saya punya:

LPCWSTR mystring;

Ini bekerja :

mystring = TEXT("Hello");

Tapi bagaimana cara melakukan ini? :

mystring = ((((create a new string with text = the content which is in another LPCWSTR 'myoldstring'))))

Terima kasih banyak sebelumnya!

PS :

mystring = myoldstring; 

akan berhasil, tetapi itu tidak akan membuat string baru, itu akan menjadi penunjuk yang sama. Saya ingin membuat string baru!


person Basj    schedule 09.12.2012    source sumber


Jawaban (3)


LPTSTR mystring;
mystring = new TCHAR[_tcslen(oldstring) + 1];
_tcscpy(mystring, oldstring);

... After you are done ...

delete [] mystring;

Ini adalah program yang lengkap

#include <tchar.h>
#include <windows.h>
#include <string.h>

int main()
{
    LPCTSTR oldstring = _T("Hello");

    LPTSTR mystring;
    mystring = new TCHAR[_tcslen(oldstring) + 1];
    _tcscpy(mystring, oldstring);

    // Stuff

    delete [] mystring;


}

Ini dikompilasi dengan baik dengan cl /DUNICODE /D_UNICODE a.cpp

Saya menggunakan tchar makro. Jika Anda tidak ingin menggunakannya, maka

#include <windows.h>
#include <string.h>

int main()
{
    LPCWSTR oldstring = L"Hello";

    LPWSTR mystring;
    mystring = new WCHAR[wcslen(oldstring) + 1];
    wcscpy(mystring, oldstring);

    // Stuff

    delete [] mystring;


}

Kompilasi dengan baik dengan cl a.cpp

person user93353    schedule 09.12.2012
comment
error C2440: '=' : impossible de convertir de 'LPCWSTR *' en 'LPCWSTR' Saya sangat sangat tidak beruntung hari ini! - person Basj; 09.12.2012
comment
@JosBas kesalahan kecil dalam kode saya - Memperbaikinya - tidak akan menghasilkan kesalahan ini. - person user93353; 09.12.2012
comment
sejalan dengan LPCWSTR baru! - person Basj; 09.12.2012
comment
Kesalahan lagi :( : error C2664: 'wcscpy' : impossible de convertir le paramètre 1 de 'LPCWSTR' en 'wchar_t *' - person Basj; 09.12.2012
comment
Apakah Anda melakukan perubahan ke-2 yang saya tunjukkan - string saya seharusnya LPTSTR atau LPWSTR bukan LPCWSTR - person user93353; 09.12.2012

Untuk menggunakan string standar C++, Anda perlu menyertakan header <string>. Karena Anda berurusan dengan LPCWSTR (penekanan pada bagian W), Anda berurusan dengan karakter lebar, jadi Anda ingin menggunakan string lebar (yaitu, std::wstring, bukan std::string).

#include <string>
#include <iostream>
#include <windows.h>

int main() { 
    LPCWSTR x=L"This is a string";

    std::wstring y = x;
    std::wcout << y;
}
person Jerry Coffin    schedule 09.12.2012
comment
Saya tidak tahu kenapa, tetapi dengan solusi ini, terjadi crash! - person Basj; 09.12.2012
comment
@JosBas: Itu menunjukkan adanya masalah dengan perpustakaan standar yang Anda gunakan, atau di tempat lain dalam kode Anda. Dari keduanya, bagi saya, masalah di tempat lain dalam kode Anda tampaknya lebih mungkin terjadi. Saya telah mengedit contoh yang sedikit lebih lengkap yang seharusnya mengkompilasi dan menampilkan string yang disalin (bagaimanapun juga bagi saya). Jika berhasil, masalah Anda mungkin ada di bagian lain kode Anda. - person Jerry Coffin; 09.12.2012
comment
Jika saya menghapus baris ini, tidak ada kerusakan. Jika saya menambahkannya, ada crash. Saya telah menggunakan nama variabel lain yang digunakan di tempat lain, sehingga kerusakan tidak dapat terjadi di tempat lain. - person Basj; 09.12.2012
comment
@JosBas: Kedengarannya seperti hasil yang cukup umum dari perilaku yang tidak terdefinisi: beberapa perubahan yang tampaknya tidak terkait tiba-tiba menyebabkan kerusakan. Tanpa melihat kode Anda yang lain, mustahil menebak dari mana asalnya. Tentu saja, ada selalu mungkin perpustakaan standar Anda rusak -- std::wstring mungkin belum teruji sebaik std::string (tetapi kemungkinan besar masalahnya ada pada kode Anda). - person Jerry Coffin; 09.12.2012

bagaimana dengan

string myNewString = std::string(myOldString);

Hanya menggunakan copy konstruktor perpustakaan string.

person cowboydan    schedule 09.12.2012
comment
'string' : identificateur introuvable ! (Tidak dapat menemukan string) Saya menggunakan C++ (tidak ada .NET ) - person Basj; 09.12.2012
comment
@JosBas #include <string> ... dan kemudian pastikan namespace std digunakan dengan benar, baik melalui awalan (std::string dihilangkan dalam salah satu dari dua kasus di atas) atau melalui using namespace std;. - person Branko Dimitrijevic; 09.12.2012