zoukankan      html  css  js  c++  java
  • [转]Convert Windows TCHAR argv list to classical char * argv

    http://www.wincli.com/?p=72

    Many people used to classical C have hard time adopting the code to Windows types. The code below illustrates one of the frequent questions: how to use TCHAR arguments with good old code expecting char * in arguments with minimum blood?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #include "stdafx.h"
    #include "stdio.h"
    #include "stdlib.h"
    // returns number of TCHARs in string
    int wstrlen(_TCHAR * wstr)
    {
        int l_idx = 0;
        while (((char*)wstr)[l_idx]!=0) l_idx+=2;
        return l_idx;
    }
    // Allocate char string and copy TCHAR->char->string
    char * wstrdup(_TCHAR * wSrc)
    {
        int l_idx=0;
        int l_len = wstrlen(wSrc);
        char * l_nstr = (char*)malloc(l_len);
        if (l_nstr) {
            do {
               l_nstr[l_idx] = (char)wSrc[l_idx];
               l_idx++;
            } while ((char)wSrc[l_idx]!=0);
        }
        nstr[l_idx] = 0;
        return l_nstr;
    }
    // allocate argn structure parallel to argv
    // argn must be released
    char ** allocate_argn (int argc, _TCHAR* argv[])
    {
        char ** l_argn = (char **)malloc(argc * sizeof(char*));
        for (int idx=0; idx<argc; idx++) {
            l_argn[idx] = wstrdup(argv[idx]);
        }
        return l_argn;
    }
    // release argn and its content
    void release_argn(int argc, char ** nargv)
    {
        for (int idx=0; idx<argc; idx++) {
            free(nargv[idx]);
        }
        free(nargv);
    }
    ////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////
    // Use exampe:
    ////////////////////////////////////////////////////////////////////////
    int _tmain(int argc, _TCHAR* argv[])
    {
        char ** argn = allocate_argn(argc, argv);
        // Optionally #define argv argn
        if (argc>1) {
                printf(“Arg 1 = ‘%s’\n”, argn[1]); // Just argn intead of argv
        }
        release_argn(argc, argn);
        return 0;
    }
  • 相关阅读:
    (2).net体系
    (1)php开篇常识
    java基础知识-xx
    java基础知识-字符串与数组
    java基础知识-流程控制
    小明的喷漆计划
    加分二叉树
    括号序列
    P1045
    胖男孩
  • 原文地址:https://www.cnblogs.com/verygis/p/2670650.html
Copyright © 2011-2022 走看看