मुझे वर्तमान कार्य निर्देशिका प्राप्त करने के लिए एक क्रॉस-प्लेटफार्म तरीका चाहिए (हाँ, getcwd जो मैं चाहता हूं)। मैंने सोचा था कि इस चाल हो सकती:वर्तमान निर्देशिका प्राप्त करने के लिए एक क्रॉस-प्लेटफार्म तरीका क्या है?
#ifdef _WIN32
#include <direct.h>
#define getcwd _getcwd // stupid MSFT "deprecation" warning
#elif
#include <unistd.h>
#endif
#include <string>
#include <iostream>
using namespace std;
int main()
{
string s_cwd(getcwd(NULL,0));
cout << "CWD is: " << s_cwd << endl;
}
मैं इस पढ़ने मिल गया:
कोई मेमोरी लीक होना चाहिए, और यह एक मैक पर भी काम करना चाहिए, सही?
अद्यतन: मुझे डर है कुछ यहाँ अभी भी गलत है (मैं, के रूप में वहाँ getcwd के लिए एक सभ्य लंबाई प्राप्त करने के लिए कोई उचित तरीके से एक निर्धारित लंबाई के साथ एक चार सरणी बनाने से बचने के लिए कोशिश कर रहा हूँ):
char* a_cwd = getcwd(NULL,0);
string s_cwd(a_cwd);
free(a_cwd); // or delete a_cwd?
यदि वह "केवल" विंडोज, लिनक्स और मैक्स ओएस एक्स के साथ संगतता में रुचि रखते हैं, तो 'getcwd (NULL)' अच्छी तरह से परिभाषित किया गया है। वे सभी एक ही तरीके से समारोह का विस्तार करते हैं। –
मैंने इसे स्वीकार कर लिया, लेकिन उपरोक्त टिप्पणी इमो सही है। यद्यपि मेरे कोड में स्मृति रिसाव था, इसलिए लिनक्स के लिए – rubenvb
@ रोबकेनेडी को हल करने की आवश्यकता है, यह लक्षित संस्करण पर निर्भर करता है। उदाहरण के लिए, आरएचईएल 5 बॉक्स पर, 'getcwd (NULL)' अभी भी अपरिभाषित होने के रूप में प्रलेखित है। –