Предлагаю внести несколько изменений. Во-первых, при инциализации массивов пользоваться функцией calloc - так проще сразу по двум причинам: (1) явно указывается размер элементов и (2) автоматически обнуляется память.
Во-вторых, обеспечить ноль в конце каждой строки: mbstowcs не обязана строить строки с нулевым окончанием.
В-третьих, сделай argv на 1 больше и поставь в качестве последней строки NULL - стандарт POSIX требует, чтобы argv заканчивался такой строкой.
я попробовал твой пример (с такими изменениями) на Linux, и получилось вот что:
#include <wchar.h>
#include <stdlib.h>
// SAP_UC - typedef, wchar_t/char
// #ifdef UNICODE ( unicode- RFC-)
// ..U
// :
typedef wchar_t SAP_UC;
#define CHAR_COUNT 25
int main(int argc, char ** argv1)
{
SAP_UC **argv = NULL;
size_t argv_len = argc+1;
size_t str_len = CHAR_COUNT + 1;
argv = calloc(argv_len, sizeof(SAP_UC*));
if (argv)
{
int count;
for (count=0;count<argc;count++)
{
argv[count] = calloc(str_len, sizeof(SAP_UC));
if (argv[count])
{
int res;
memset( argv[count], 0, CHAR_COUNT * sizeof(SAP_UC) );
printf("converting argv[%d] (%s) ...", count, argv1[count]);
res = mbstowcs(argv[count], argv1[count], CHAR_COUNT);
printf(" result %d\n", res);
}
}
argv[argc] = NULL;
for (count=0;count<argc;count++)
{
int pos;
printf("argv[%d]: ", count);
for (pos = 0; pos < str_len; pos ++)
{
printf("0x%04x ", argv[count][pos]);
}
printf("\n");
}
}
return 0;
}
и вывод:
./some.exe -a DLG_TEST -g sap1 -x sapgw00
converting argv[0] (./some.exe) ... result 10
converting argv[1] (-a) ... result 2
converting argv[2] (DLG_TEST) ... result 8
converting argv[3] (-g) ... result 2
converting argv[4] (sap1) ... result 4
converting argv[5] (-x) ... result 2
converting argv[6] (sapgw00) ... result 7
argv[0]: 0x002e 0x002f 0x0073 0x006f 0x006d 0x0065 0x002e 0x0065 0x0078 0x0065 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
argv[1]: 0x002d 0x0061 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
argv[2]: 0x0044 0x004c 0x0047 0x005f 0x0054 0x0045 0x0053 0x0054 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
argv[3]: 0x002d 0x0067 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
argv[4]: 0x0073 0x0061 0x0070 0x0031 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
argv[5]: 0x002d 0x0078 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
argv[6]: 0x0073 0x0061 0x0070 0x0067 0x0077 0x0030 0x0030 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000