Tôi gặp lỗi trong chương trình của mình: "không thể chuyển đổi từ chuỗi thành char *". Làm cách nào để thực hiện chuyển đổi này?Làm cách nào để chuyển đổi chuỗi thành char * trong C++?
Trả lời
Nếu bạn có thể giải quyết cho một const char*
, bạn chỉ cần gọi phương thức c_str()
vào nó:
const char *mycharp = mystring.c_str();
Nếu bạn thực sự cần một sửa đổi char*
, bạn sẽ cần phải tạo một bản sao của bộ đệm của chuỗi. Một vector
là một cách lý tưởng xử lý này cho bạn:
std::vector<char> v(mystring.length() + 1);
std::strcpy(&v[0], mystring.c_str());
char* pc = &v[0];
Gọi str.c_str()
để có được một const char*
:
const char *pch = str.c_str();
Lưu ý rằng kết quả const char*
chỉ có giá trị cho đến khi str
bị thay đổi hoặc bị phá hủy.
Tuy nhiên, nếu bạn thực sự cần một phi const
, có lẽ bạn không nên sử dụng std::string
, vì nó không được thiết kế để cho phép thay đổi dữ liệu cơ bản của nó sau lưng nó. Điều đó nói rằng, bạn có thể nhận được một con trỏ đến dữ liệu của nó bằng cách gọi &str[0]
hoặc &*str.begin()
.
Độ xấu của việc này phải được coi là một tính năng. Trong C++ 98, std::string
thậm chí không cần thiết để lưu trữ dữ liệu của nó trong một đoạn bộ nhớ liền kề, do đó, điều này có thể phát nổ vào khuôn mặt của bạn. Tôi nghĩ rằng đã thay đổi, nhưng tôi thậm chí không thể nhớ cho dù điều này là dành cho C + + 03 hoặc phiên bản tiếp theo sắp tới của tiêu chuẩn, C + + 1x.
Nếu bạn cần thực hiện việc này, hãy cân nhắc sử dụng std::vector<char>
thay thế. Bạn có thể truy cập dữ liệu của nó theo cùng một cách: &v[0]
hoặc &*v.begin()
.
Sử dụng phương pháp c_str()
trên đối tượng string
để nhận con trỏ const char*
. Cảnh báo: Con trỏ trả về không còn hợp lệ nếu đối tượng string
được sửa đổi hoặc bị hủy.
std::string::c_str()
trả về chuỗi c có cùng nội dung với đối tượng string
.
std::string str("Hello");
const char* cstr = str.c_str();
Vì bạn muốn đi từ một string
đến một char*
(tức là, không phải là một const char*
), bạn có thể làm điều này nhưng hãy cẩn thận: có thể là con rồng ở đây:
string foo = "foo";
char* foo_c = &foo[0];
Nếu bạn cố gắng để thay đổi nội dung của chuỗi, bạn thực sự tốt và thực sự.
Vấn đề không chỉ là sửa đổi nội dung - nội dung của chuỗi không được đảm bảo tiếp giáp, vì vậy nó có thể không hoạt động chút nào. – CiscoIPPhone
Tôi có thể sai ở đó, theo câu trả lời được chấp nhận cho câu hỏi này, nó được đảm bảo tiếp giáp trong tiêu chuẩn mới: http://stackoverflow.com/questions/1986966/does-s0-point-to-contiguous-characters-in -a-stdstring – CiscoIPPhone
Nếu const char*
là tốt cho bạn sau đó sử dụng này: myString.c_str()
Nếu bạn thực sự cần char*
và biết chắc chắn rằng char*
sẽ không thay đổi thì bạn có thể sử dụng này: const_cast<char*>(myString.c_str())
Nếu char*
có thể thay đổi sau đó bạn cần phải sao chép chuỗi vào một cái gì đó khác và sử dụng thay vào đó. Điều gì đó khác có thể là std::vector
hoặc new char[]
, điều đó tùy thuộc vào nhu cầu của bạn.
//assume you have an std::string, str.
char* cstr = new char[str.length() +1];
strcpy(cstr, str.c_str());
//eventually, remember to delete cstr
delete[] cstr;
- 1. .NET/C# - Chuyển đổi char [] thành chuỗi
- 2. Làm thế nào để chuyển đổi char thành chuỗi?
- 3. C++ chuyển đổi char thành const char *
- 4. Chuyển đổi chuỗi thành char
- 5. Làm cách nào để chuyển đổi chuỗi chứa chuỗi thoát ký tự thành char?
- 6. C Chuyển đổi char thành char *
- 7. Có thể chuyển đổi char [] thành char * trong C?
- 8. Làm cách nào để chuyển đổi chuỗi C++ thành int?
- 9. PowerShell chuyển đổi Char Array thành chuỗi
- 10. Làm thế nào để chuyển đổi NSString thành chuỗi C?
- 11. C++ chuyển đổi từ 1 char thành chuỗi?
- 12. Chuyển đổi char * để WCHAR * trong C
- 13. Làm thế nào để chuyển đổi Platform :: String thành char *?
- 14. Làm cách nào để chuyển đổi Hệ thống :: Chuỗi^thành const char *?
- 15. Làm cách nào để chuyển đổi từ chuỗi chuỗi thành chuỗi trong C++?
- 16. Cách chuyển đổi một phần của mảng char thành chuỗi
- 17. Cách chuyển đổi 'wchar_t *' thành 'const char *'
- 18. Làm thế nào để bạn chuyển đổi một chuỗi thành ascii thành nhị phân trong C#?
- 19. Làm cách nào để chuyển đổi mã khóa thành char hoặc chuỗi?
- 20. Làm thế nào để chuyển đổi char * thành unsigned ngắn trong C++
- 21. Làm thế nào để tránh chuyển đổi NỮA từ chuỗi liên tục để 'char *' trong C++
- 22. Làm thế nào để chuyển đổi Char thành Float
- 23. Làm cách nào để chuyển đổi chuỗi dài thành chuỗi trong C++?
- 24. Chuyển đổi từ nhị phân thành char trong C
- 25. Chuyển đổi đơn char trong Chuỗi thành chữ thường
- 26. Làm cách nào để chuyển đổi StreamReader thành chuỗi?
- 27. Cython - chuyển đổi danh sách các chuỗi thành char **
- 28. Làm thế nào để chuyển đổi jbyteArray thành char bản địa * trong jni?
- 29. làm thế nào để chuyển đổi một chuỗi c thành chuỗi d?
- 30. Làm thế nào để chuyển đổi số nguyên thành char trong C?
Vui lòng gửi mẫu mã. – superfro
KHÔNG CÓ câu trả lời được đăng nào trả lời câu hỏi thực tế. –
cảm ơn tất cả các bạn, nó hoạt động! – Ptichka