\0 sprintf( ) strcat( )
#include <iostream.h>
main(){
char color_r[12], color_g[3], color_b[3];
sprintf(color_b, "%d", 123);
sprintf(color_g, "%d", 456);
sprintf(color_r, "%d", 789);
strcat(color_r,",");
strcat(color_r,color_g);
strcat(color_r,",");
strcat(color_r,color_b);
cout << color_r;
printf("\n%s",color_r[11]);
}
結果は
789,456,123
(null)
問題ない。
でも、Winプログラムだと問題がある。
#include <windows.h>
#include <iostream.h>
。。。
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
char color_r[12], color_g[3], color_b[3];
sprintf(color_b, "%d", 123);
sprintf(color_g, "%d", 456);
sprintf(color_r, "%d", 789);
strcat(color_r,",");
strcat(color_r,color_g);
strcat(color_r,",");
strcat(color_r,color_b);
TextOut(hdc,10,10,color_r,strlen(color_r));
EndPaint(hWnd, &ps);
break;
結果は、実行時エラーです。
えらーだけど、TextOut( ) での表示が
789,456,123456
となっているのは見れる。
456 というのがくっく。
これが問題。
char color_r[12], color_g[4], color_b[4];
として \0 の領域を用意してやれば問題は起こらないけど、
[4] にしたとして、\0 がどのように作用しているのかが
分かりません。
[3] のエラーは
strcat(color_r,color_b);
の次に
strcat(color_r,"\0");
を書けばいいような気がしてやってみたけど、
結果は変わらず、実行時エラー。
やっていることは GetPixel( ) の3色分離だけど、
配列の \0 をケチって宣言すると、
R,G,B が、R,G,BG となってしまうことが分かったけど
どうして R,G,BG になるのかを知りたいです。
お礼
ありがとうございます^_^