プロが教えるわが家の防犯対策術!

C言語でWindowsプログラミングをしているのですが、文字がうまく扱えなくて困っています。

txtファイルから読み込んだ文字を"@@"のところで区切って、ウィンドウに描画するだけなのですが、うまくできません。



例)
contents.txtファイル(以下中身です。)
データ整理@@ファイル、フォルダをインポート@@アドレスからインポート@@txtとpdf(html,jpg,bmp)を等価に扱う@@検索@@タグ

これをウィンドウに

 データ整理
 ファイル、フォルダをインポート
 アドレスからインポート
 txtとpdf(html,jpg,bmp)を等価に扱う
 検索
 タグ

というように表示したいのですが、なぜか

 データ整理
 ファイル、フォルダをインポートアドレスからインポート
 アドレスからインポート
 txtとpdf(html,jpg,bmp)を等価に検索
 検索
 タグ

のように表示されてしまいます。
(二段目と四段目がおかしくなっています、書き間違えではないです、念のため)




初心者なので、勉強不足による些細な間違いかもしれませんが、なにとぞ知恵をお貸しくださいm(_ _)m


以下、ソースコードのメッセージ処理部分です。
ウィンドウ生成のひな型は問題ないと判断しました。




LRESULT CALLBACK WndProc(HWND hWnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
static int i = 0, j = 0, k = 0;
int fp;
HDC hdc;
PAINTSTRUCT ps;
char script[1000];
static char title[100][30];

switch (msg){
//ウィンドウ生成時
case WM_CREATE:
fp = Reading("./contents.txt", script);
if(fp == -1){
MessageBox(hWnd, (LPCSTR)"contents.txtが存在しない",
(LPCSTR)"ERROR", MB_OK | MB_ICONEXCLAMATION);
}else{
for(;;){
if(script[i] == '\0'){
title[j][k] = '\0';
break;
}else if(script[i] == '@' && script[i+1] == '@'){
title[j][k] = '\0';
i += 2;
j++;
k = 0;
}else{
title[j][k] = script[i];
i++;
k++;
}
}
for(i = 0; i <= j; i++){
}
}
break;
//ウィンドウの描画
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
SetBkMode(hdc, TRANSPARENT);
for(i = 0; i <= j; i++){
TextOut(hdc, 0, MOJI_SIZE * i, (LPSTR)title[i], strlen(title[i]));
}
EndPaint(hWnd, &ps);
break;
//ウィンドウの削除
case WM_DESTROY:
PostQuitMessage(0);
break;

default:
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
return (0L);
}


//読み込み
int Reading(const char* filename, char* script)
{
int pos = 0;
char c;
//スクリプトファイル
FILE* fp;

//スクリプトファイルを開く
fp = fopen(filename, "r");
if( fp == NULL ) {
//ファイル読み込みに失敗
return -1;
}

for( ;; ) {
//一文字読み込み
c = fgetc( fp );
//ファイルの終わりかどうか
if( feof( fp ) ) {
script[pos] = '\0';
break;
}

//改行文字が出てきた場合,無視
if( c != '\n' && c != '\t' ) {
//書き込み
script[pos] = c;
//文字書き込み位置をずらす
pos++;
}
}
fclose(fp);

return 0;
}

A 回答 (1件)

> static char title[100][30];



半角30文字×100行分の領域ですよね?

> txtとpdf(html,jpg,bmp)を等価に扱う

半角換算で34文字分あります。
    • good
    • 0
この回答へのお礼

static char title[100][50];
にすればうまくいきました!!

こんな簡単なことだったとは…
お手を煩わせてすみません。
ありがとうございましたm(_ _)m

お礼日時:2013/05/09 00:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!