We must care about printf("%c", c);
c means natually "char c;"
char* vc;
char* vs;
vs = va_arg( *p_ap, char* );
// Not: vc = va_arg( *p_ap, char );
And program executed very smooth if you use malloc to print something to memories.
The fllowing are source code:
// main_000.cpp
void check_lootin () {
const char* char_string = "char_string";
char c = 'A';
int num = 10;
float f_num = 10.054f;
DEBUG ("check_lootin", "%f %3d %c %s\r\n", f_num, num, c, char_string );
}
// aDebug.cpp
//
//
// 1st: f_name : Function name
// 2nd: p_ind : Parameter indicator
//
int DEBUG ( char* f_name, const char* fmt, ...) {
char* result;
va_list ap;
if (debug_allow_print_console == 1 ) {
printf("START:DEBUG\r\n");
va_start(ap, fmt);
wsprintf( (LPSTR) dummy_str_print, (LPCSTR)"%s", vformat(fmt, &ap));
result = NULL;
result = (char *) dummy_str_print;
printf("DEBUG: %s %s \r\n", f_name, result);
printf("DEBUG: %s %s \r\n", f_name, dummy_str_print);
va_end(ap);
printf("END:DEBUG\r\n");
}
return 0;
}
// Print.cpp
//
//
//
wchar_t* vformat(const char* fmt, va_list *p_ap) {
// char buf[2000];
wchar_t* abuf;
abuf = (wchar_t*) L"aaa";
// x vswprintf(buf, _toChars((char*)fmt), args);
// o vswprintf( abuf, L"aaa", args);
// vswprintf( abuf, _toChars( (char*)fmt ), args);
// o vswprintf(abuf, _toChars((char*)fmt), args);
// char *str_org = (char *)"left=%d top=%d right=%d bottom=%d";
char strx[2000];
char** ctype;
char** param;
double vf;
int vi;
char* vs;
char vc;
char* vsc = "\0\0";
va_list ap;
// o wsprintf( (LPWSTR)strx, (LPCWSTR)str_org, 10, 10, 10, 10);
// o wsprintf( (LPWSTR)strx, (LPCWSTR)str_org, args);
// 20181127
// x wsprintf((LPWSTR)strx, (LPCWSTR)fmt, args);
printf("wchar_t* vformat:start\r\n");
ctype = (char**) malloc ( sizeof(char*)*256 );
for( int i=0; i< 256; i++ ) {
ctype[i] = (char*) malloc ( sizeof(char)* 10 );
}
param = (char**) malloc ( sizeof(char*)*256 );
for( int i=0; i< 256; i++ ) {
param[i] = (char*) malloc ( sizeof(char)* 30 );
}
int c_percent = count_perceent(fmt, (char**)ctype);
// va_start( ap, c_percent);
int c_param = 0;
for ( int i=0; i<c_percent; i++ ) {
printf("loop i: %d/%d\r\n", i, c_percent );
if ( m_compare ( ctype[i], "int" ) == 1 ) {
vi = va_arg( *p_ap, int );
itoa( vi, param[c_param], 10);
param[c_param] = m_concat(param[c_param], ":");
c_param++;
} else if ( m_compare ( ctype[i], "char" ) == 1 ) {
printf("char:start\r\n");
vs = va_arg( *p_ap, char* );
for ( int j=0; j<2; j++) {
//printf("vs:%d %d", j, vs[j]);
printf("vs:%d\r\ns", j);
}
printf("char:va_arg\r\n");
//vc = tochar(vs);
printf("char:tochar\r\n");
// x vc = va_arg( *p_ap, char* );
// x vc = vs;
// x vc = *vs;
// x vc = va_arg( *p_ap, char );
// x vs[1] = '\0'; // o
// o vc = 1;
// x vsc[0] = vc;
//printf("char:vs:%d %c char:vc:%d\r\n", vs, vs, vc);
// x *(vsc) = vc;
sprintf( param[c_param], "%c", vs);
// x param[c_param][0] = vc;
// x param[c_param][1] = '\0';
printf("char:param:\r\n");
// param[c_param] = m_concat(param[c_param], ":");
printf("char:m_concat\r\n");
c_param++;
printf("char:end\r\n");
} else if ( m_compare ( ctype[i], "float" ) == 1 ) {
vf = va_arg( *p_ap, double );
sprintf(param[c_param], "%f", vf);
param[c_param] = m_concat(param[c_param], ":");
c_param++;
} else if ( m_compare ( ctype[i], "string" ) == 1 ) {
vs = va_arg( (va_list)*p_ap, char* );
param[c_param] = vs;
param[c_param] = m_concat(param[c_param], ":");
c_param++;
}
}
for ( int i=0; i< c_param; i++) {
printf("param:%d %s\r\n", i, param[i]);
}
//wsprintf( (LPSTR)strx, (LPCSTR)fmt, args);
// vsprintf(buf, 2000, _toChars((char*)fmt, args);
// vswprintf(buf, fmt, args);
// char* result = toChars( abuf );
//va_end( ap );
//free
for( int i=0; i< 256; i++ ) {
free(ctype[i]);
}
free(ctype);
for( int i=0; i< 256; i++ ) {
free(param[i]);
}
free(param);
printf("wchar_t* vformat:end\r\n");
return abuf;
}
I'm pleasure if you download the below.
https://github.com/WaitrudWeber/source_zip/blob/master/winmain-20190112.zip
Please reffer to the below for compilation.
https://waitrudweber.hatenablog.com/entry/2018/05/01/005938