Próbuję użyć beginthreadex, aby utworzyć wątek, który uruchomi funkcję, która pobiera znak jako argument. Jestem jednak zły w C++ i nie mogę wymyślić, jak zamienić char w konst char , który beginthreadex potrzebuje do swojej argumentacji. Czy jest jakiś sposób na zrobienie tego? Znajduję wiele pytań dotyczących konwersji char na const char, ale nie na const char *.C++ Konwertowanie znaków na znaki stałe *
Odpowiedz
char a = 'z';
const char *b = &a;
Oczywiście jest to na stosie. Jeśli jest to potrzebne na stercie,
char a = 'z';
const char *b = new char(a);
Pytanie dotyczy języka C++, więc zamiast tego możesz użyć 'nowego'. – filmor
@filmor, masz rację. Gotowe. –
Jeśli funkcja oczekuje const wskaźnik do opuszczającego charakteru należy udać się z odpowiedzią Paul Draper. Należy jednak pamiętać, że nie jest to wskaźnik do zakończonego znakiem null łańcucha, czego funkcja mogłaby się spodziewać. Jeśli potrzebujesz wskaźnik do NUL łańcuch można użyć std::string::c_str
f(const char* s);
char a = 'z';
std::string str{a};
f(str.c_str());
Ponieważ nie wykazały żadnego kodu trudno wiedzieć dokładnie, co chcesz, ale tutaj jest sposób, aby wywołać funkcję spodziewa char jako argument w wątku. Jeśli nie możesz zmienić funkcji konwersji samego argumentu, potrzebujesz funkcji trampoliny, aby usiąść w środku i wywołać rzeczywistą funkcję.
#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. Konwertowanie tablicy bajtów zawierających znaki ASCII na ciąg znaków
- 2. Konwertowanie znaków zenkaku na hankaku i vice versa w C#
- 3. konwertowanie nazwy zmiennej na ciąg znaków w C++
- 4. Konwertowanie znaków Unicode na ciąg znaków
- 5. Konwertowanie DateTime na ciąg znaków
- 6. Konwertowanie bajtów na ciąg C#
- 7. F #: Konwertowanie ciągu znaków na tablicę bajtów
- 8. Gdzie mogę znaleźć stałe znaków w C#?
- 9. PL/SQL konwertowanie znaków specjalnych
- 10. Konwertowanie ciągu znaków szesnastkowych na niepodpisany numer int C++
- 11. Konwertowanie int na 4-bajtową tablicę znaków (C)
- 12. Konwertowanie tablic łańcuchów C na ciąg znaków Swift
- 13. Konwertowanie tablicy macierzy na tablicę ciągów znaków
- 14. Konwertowanie ciągów znaków na listy w pythonie
- 15. Konwertowanie łączonego ciągu znaków na CamelCase
- 16. JavaScript Konwertowanie wartości ciągów znaków na szesnastkowy
- 17. Konwertowanie zawartości pliku HtmlTextWriter na ciąg znaków
- 18. konwertowanie statycznego ciągu znaków 2D na HashMap
- 19. Konwertowanie ciągu znaków dziesiętnych na długi
- 20. Konwertowanie listy Panda DF na ciąg znaków
- 21. Konwertowanie ciągu znaków HTML na element DOM?
- 22. Konwertowanie ciągu znaków na obiekt JSON
- 23. C# Regex literowe znaki z ciągu znaków
- 24. Konwertowanie bajtu C# na BitArray
- 25. Konwertowanie ciągu znaków na bezpieczny internetowy identyfikator URI
- 26. Konwertowanie funkcji z C++ na C#
- 27. Szablony i stałe ciągi znaków
- 28. Konwertuj znaki specjalne na kody znaków HTML
- 29. php przerwać ciąg znaków na znaki
- 30. Jak konwertować liczbę znaków na znaki ASCII?
Można niejawnie przekształcić "char *" w "const char *". Nie musisz nic robić. – asveikau
@asveikau: To nie pomaga przekazać wartości 'char' do czegoś, co chce wskaźnika. –
Zgodnie z dokumentacją (http://msdn.microsoft.com/en-us/library/kdzttdcb.aspx) 'beginthreadex' chce' void * '. – dalle