)で構成されています... Windows APIを使用してプロセスとスレッドを作成する方法を学び始めました。スレッドが画面上に整数を表示するようにするにはコードが機能しますが、文字配列を使用するときには機能しません...何か間違っているのか誰かに教えてもらえますか?コード:CreatThread APIを使用してスレッドを作成した後、コンソール上の出力は疑問符(
#include<stdio.h>
#include<Windows.h>
#include<conio.h>
#include<tchar.h>
#include<strsafe.h>
#include<string.h>
#define N 4
#define bufferSize 255
DWORD WINAPI Threader(LPVOID Parameter);
typedef struct Data {
char value[bufferSize];
} Data, *pToData;
int main()
{
int i;
char c[bufferSize];
pToData threadData[N];
HANDLE handleArray[N];
DWORD threadID[N];
FILE *file=fopen("niti.txt", "r");
for(i=0; i<N; i++)
{
fscanf(file, "%s", c);
threadData[i] = (pToData) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(Data));
strcpy(threadData[i]->value, c);
handleArray[i]=CreateThread(NULL, 0, Threader, threadData[i], 0, &threadID[i]);
}
WaitForMultipleObjects(N, handleArray, TRUE, INFINITE);
for(i=0; i<N; i++)
{
CloseHandle(handleArray[i]);
if(threadData[i] != NULL)
{
HeapFree(GetProcessHeap(), 0, threadData[i]);
threadData[i] = NULL;
}
}
fclose(file);
return 0;
}
DWORD WINAPI Threader(LPVOID Parameter)
{
HANDLE hStdOut;
TCHAR messageBuffer[bufferSize];
size_t cchStringSize;
DWORD dwChars;
pToData dataArray;
char temp[bufferSize];
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if(hStdOut == INVALID_HANDLE_VALUE)
return 1;
dataArray=(pToData)Parameter;
StringCchPrintf(messageBuffer, bufferSize, TEXT("Parameter = %s\n"), dataArray->value);
StringCchLength(messageBuffer, bufferSize, &cchStringSize);
WriteConsole(hStdOut, messageBuffer, (DWORD)cchStringSize, &dwChars, NULL);
return 0;
}
私はint型に私の構造体に値を変更し、メインで出力を同じことを行う場合は、正しいです。助言がありますか? ありがとうございました!
ありがとうございます... __wchar_t__は魅力的でした! __strcpy()__を__wcscpy()に変更しなければならなかった__再び、ありがとう! – zkristic
'_tcscpy'を使って' TCHAR'にマッチさせることができますが、もっと先に進む前にテキストエンコーディングの上に乗る必要があると思います。それは私が恐れていない、ちょっとしたミッシュマッシュなのです。 –
私は本当にテキストエンコーディングの上に乗るべきです...このことは昨日以来私を悩ませていました!件名(エンコードとC/C++での使用法)に関して、それらを調べる価値のあるページへのリンクがありますか?宜しくお願いします! – zkristic