2012-05-08 38 views
9

Cách nào là cách không đau đớn nhất để nhập chuỗi ký tự không thoát được vào std::string?Xác định std :: chuỗi trong C++ không có ký tự thoát

Thay vì

std::string st = "C:\\program files\\myFile.txt"; 

cái gì đó như: (Không làm việc một cách chính xác do để thoát khỏi nhân vật).

std::string st = "C:\program files\myFile.txt"; 
+0

Bạn đang xây dựng bằng cách nào? Bạn có thể lưu trữ nội dung trong tệp '.txt' và thêm quy tắc' Makefile' để chuyển đổi nó thành tệp .'h' không? –

+0

@MikeSamuel, tôi đang sử dụng Visual Studio. –

+0

Người downvoter có thể giải thích những gì sai trong câu hỏi không? –

Trả lời

22

Đối với tên tập tin, chỉ cần sử dụng dấu gạch chéo hướng khác (chuyển tiếp trở lại?). Nó cũng hoạt động trên Windows:

std::string st = "C:/program files/myFile.txt"; 
+2

FFR, forward: /, back: \. – chris

+4

@chris: Cảm ơn, nhưng nỗ lực của bạn bị lãng phí. Tôi sẽ quên một lần nữa vì bộ não của tôi không coi nó đủ quan trọng để nhớ. –

+1

Điều này không phải lúc nào cũng hoạt động với một số trình điều khiển hệ thống tệp hoặc nếu đường dẫn dài hơn MAX_PATH và tiền tố đường dẫn mở rộng được sử dụng – paulm

0

C & C++ chỉ hỗ trợ sử dụng \ để thoát chuỗi và bạn phải sử dụng. Nếu bạn có một loạt các đường dẫn để làm việc với, tôi khuyên bạn nên mở chúng trong trình chỉnh sửa và thực hiện thay thế hàng loạt \ bằng \\.

+5

FYI: đọc câu trả lời của juanchopanza, các chuỗi chữ thô cuối cùng cũng đã xuất hiện. –

52

Bạn có thể làm điều đó với C++ 11 raw string literals:

std::string st = R"(C:\program files\myFile.txt)"; 
+1

Tuyệt vời. LR cho ký tự rộng. Và cú pháp nhầm lẫn tôi lúc đầu bởi vì các dấu phân tách cho đầu và cuối của chuỗi là chuỗi ký tự đôi ... "(... và sau đó ...)" –

+1

Ew cú pháp này là kinh tởm. Có ý tưởng sáng nào là đặt dấu ngoặc kép() vào dấu ngoặc kép? Và phiên bản thay thế, dấu phân tách "dấu phân tách" (R), thậm chí còn tồi tệ hơn. – Andrew

Các vấn đề liên quan