c++ - डबल निरर्थक स्ट्रिंग




string mfc (2)

SHFileOperation का उपयोग करने के लिए मुझे एक स्ट्रिंग को दोहरी नल-टर्मिनेटेड स्ट्रिंग प्रारूपित करने की आवश्यकता है I

दिलचस्प हिस्सा मुझे निम्नलिखित में से एक काम मिल गया है, लेकिन दोनों नहीं:

  // Example 1
  CString szDir(_T("D:\\Test"));
  szDir = szDir + _T('\0') + _T('\0');

  // Example 2  
  CString szDir(_T("D:\\Test"));
  szDir = szDir + _T("\0\0");

  //Delete folder
  SHFILEOPSTRUCT fileop;
  fileop.hwnd   = NULL;    // no status display
  fileop.wFunc  = FO_DELETE;  // delete operation
  fileop.pFrom  = szDir;  // source file name as double null terminated string
  fileop.pTo    = NULL;    // no destination needed
  fileop.fFlags = FOF_NOCONFIRMATION|FOF_SILENT;  // do not prompt the user
  fileop.fAnyOperationsAborted = FALSE;
  fileop.lpszProgressTitle     = NULL;
  fileop.hNameMappings         = NULL;
  int ret = SHFileOperation(&fileop);

क्या किसी को इस पर विचार है?

क्या डबल-टर्मिनेटेड स्ट्रिंग जोड़ने का कोई अन्य तरीका है?

https://code.i-harness.com


आप इस उद्देश्य के लिए CString उपयोग नहीं कर सकते। आपको अपना खुद का char[] बफर इस्तेमाल करना होगा:

char buf[100]; // or large enough
strcpy(buf, "string to use");
memcpy(buf + strlen(buf), "\0\0", 2);

यद्यपि आप केवल मौजूदा एनयूएल टर्मिनेटर के बाद एक और एनयूएल बाइट की प्रतिलिपि बनाकर ऐसा कर सकते हैं, मैं दो की प्रतिलिपि करना चाहूंगा ताकि स्रोत कोड अधिक सटीक रूप से प्रोग्रामर के इरादे को प्रतिबिंबित करे।


सीएसटीआरिंग क्लास के पास स्ट्रिंग में कोई समस्या नहीं है जिसमें कोई रिक्त कैरेक्टर होता है। पहली जगह में स्ट्रिंग में रिक्त वर्ण डालने के साथ समस्या आती है पहला उदाहरण इसलिए काम करता है क्योंकि यह एक एकल वर्ण संलग्न कर रहा है, स्ट्रिंग नहीं - यह चरित्र को स्वीकार करता है कि यह देखने के लिए कि क्या यह शून्य है दूसरा उदाहरण एक विशिष्ट सी स्ट्रिंग को शामिल करने की कोशिश करता है, जो परिभाषा के पहले नल वर्ण पर समाप्त होता है - आप एक खाली स्ट्रिंग को प्रभावी ढंग से जोड़ रहे हैं।





shfileoperation