格式化输出中的%s和%S的陷阱

CStringA csa;
CStringA csc;
CString csb(L"131231111111");
csa.Format("%s", csb);      // 只会输出1
csc.Format("%S", csb);      // 会输出131231111111

printf("%s\n", csa.GetBuffer(0));
printf("%s\n", csc.GetBuffer(0));

本意想输出131231111111,可是"%s"只会输出1,因为%s是按照ascill编码,而csb是unicode编码,unicode编码格式是一个"1"后会跟一个0x00,所以对于ascill来说,就认为字符串终止了.

 

%s和%S在不同的环境下,含义不一样:

s

 

When used with printf functions, specifies a single-byte–character string; when used with wprintf functions, specifies a wide-character string. Characters are printed up to the first null character or until the precision value is reached

 

S

 

When used with printf functions, specifies a wide-character string; when used with wprintf functions, specifies a single-byte–character string. Characters are printed up to the first null character or until the precision value is reached.

posted @ 2015-05-03 18:23  一直向前的射手  阅读(1250)  评论(0编辑  收藏  举报