मैं एक थ्रेड बनाने के लिए beginthreadex का उपयोग करने की कोशिश कर रहा हूं जो एक ऐसा कार्य चलाएगा जो एक तर्क के रूप में चार लेता है। मैं सी ++ में बुरा हूं, हालांकि, और मैं यह नहीं समझ सकता कि चार को एक कॉन्स चार में कैसे चालू किया जाए, जिसे beginthreadex को इसके तर्क की आवश्यकता है। क्या ऐसा करने के लिए कोई रास्ता है? मुझे चार को एक कॉन्स char में परिवर्तित करने के लिए बहुत सारे प्रश्न मिलते हैं, लेकिन एक कॉन्स char * के लिए नहीं।सी ++ एक चार को एक कॉन्स char में परिवर्तित करना *
उत्तर
char a = 'z';
const char *b = &a;
बेशक, यह ढेर पर है। आप ढेर पर उसकी आवश्यकता है,
char a = 'z';
const char *b = new char(a);
प्रश्न सी ++ के बारे में है, इसलिए आप इसके बजाय 'new' के साथ जाना चाहेंगे। – filmor
@ फिल्मर, आप सही हैं। किया हुआ। –
समारोह एक बाहर निकलने चरित्र आप पॉल ड्रेपर के जवाब के साथ जाना चाहिए करने के लिए एक स्थिरांक सूचक की उम्मीद है। लेकिन ध्यान रखें कि यह एक शून्य समाप्त स्ट्रिंग के लिए सूचक नहीं है, फ़ंक्शन की अपेक्षा क्या हो सकती है। आप std::string::c_str
f(const char* s);
char a = 'z';
std::string str{a};
f(str.c_str());
का उपयोग आप एक सूचक की जरूरत है समाप्त स्ट्रिंग शून्य कर सकते हैं के बाद से आप किसी भी कोड यह पता करने के लिए वास्तव में आप क्या चाहते हैं मुश्किल है नहीं दिखा था, लेकिन यहां एक तरह से एक समारोह के रूप में एक चार की उम्मीद कर कॉल करने के लिए है धागे में एक तर्क। यदि आप तर्क को स्वयं परिवर्तित करने के लिए फ़ंक्शन को नहीं बदल सकते हैं तो आपको ऐसा करने के लिए बीच में बैठने के लिए एक ट्रैम्पोलिन फ़ंक्शन की आवश्यकता होती है और वास्तविक फ़ंक्शन को कॉल किया जाता है।
#include <Windows.h>
#include <process.h>
#include <iostream>
void ActualThreadFunc(char c)
{
std::cout << "ActualThreadFunc got " << c << " as an argument\n";
}
unsigned int __stdcall TrampolineFunc(void* args)
{
char c = *reinterpret_cast<char*>(args);
std::cout << "Calling ActualThreadFunc(" << c << ")\n";
ActualThreadFunc(c);
_endthreadex(0);
return 0;
}
int main()
{
char c = '?';
unsigned int threadID = 0;
std::cout << "Creating Suspended Thread...\n";
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &TrampolineFunc, &c, CREATE_SUSPENDED, &threadID);
std::cout << "Starting Thread and Waiting...\n";
ResumeThread(hThread);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
std::cout << "Thread Exited...\n";
return 0;
}
- 1. एनएसएसटींग को कॉन्स char
- 2. एक वर्ण कोड को चार (VB.NET) में परिवर्तित करना
- 3. कॉन्स char * सी ++
- 4. एक बूस्ट :: फाइल सिस्टम :: निर्देशिका_इटरेटर को एक कॉन्स char *
- 5. एक चार शाब्दिक से एक char *
- 6. सी ++ फ़ंक्शन रिटर्निंग कॉन्स char *
- 7. एक एनएसएसटींग * को चार में कनवर्ट करना?
- 8. एक 'हस्ताक्षर किए गए चार' को `char`
- 9. सी # में एक चार **
- 10. एक char * को एक कॉन्स char * असाइन करना क्यों संभव है?
- 11. एक seq [चार] परिवर्तित स्ट्रिंग
- 12. सी ++ std :: स्ट्रिंग और नल कॉन्स char *
- 13. एक एकल-बाइट कॉन्स char * को एक यूटीएफ -8 एन्कोडिंग में परिवर्तित करने के लिए कैसे करें
- 14. क्या मैं सी # में एक कॉन्स char से एक कॉन्स स्ट्रिंग प्रारंभ कर सकता हूं?
- 15. सी चार को चार *
- 16. कॉन्स चार सूचक असाइनमेंट
- 17. कॉन्स शुद्धता: कॉन्स चार कॉन्स * कॉन्स गेटनाम कॉन्स (// सामान);
- 18. क्या सी में char [] से char * को परिवर्तित करना संभव है?
- 19. मैं सी में 'char **' को 'const char * const *' में क्यों परिवर्तित नहीं कर सकता?
- 20. कॉन्स कॉन्सएक्सप्रैर चार * बनाम कॉन्सएक्सप्रैर चार *
- 21. प्वाइंटर्स टू कॉन्स चार
- 22. सी ++ और कॉन्स - एक कॉन्स संदर्भ
- 23. सी ++ में एक कॉन्स int को पॉइंटर वैरिएबल असाइन करना?
- 24. एक char
- 25. एक size_t को एक पूर्णांक में परिवर्तित करना (सी ++)
- 26. परिवर्तित चार [] सरणी चार करने के लिए **
- 27. सी में चार से पूर्णांक को कैसे परिवर्तित करें?
- 28. एक चार
- 29. कॉन्स char * [] घोषणा
- 30. चार सरणी को एनएसएसटींग ऑब्जेक्ट में परिवर्तित करना
आप स्पष्ट रूप से 'char *' को 'const char *' में परिवर्तित कर सकते हैं। कुछ भी करने की ज़रूरत नहीं है। – asveikau
@asveikau: इससे आपको 'char' मान को कुछ ऐसा करने में मदद नहीं मिलती है जो पॉइंटर चाहता है। –
प्रलेखन के अनुसार (http://msdn.microsoft.com/en-us/library/kdzttdcb.aspx) 'beginthreadex' एक' शून्य * 'चाहता है। – dalle