Convert Windows TCHAR argv list to classical char * argv

來源:互聯網
上載者:User

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?

?
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 #include "stdafx.h"#include "stdio.h"#include "stdlib.h" // returns number of TCHARs in stringint 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->stringchar * 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 releasedchar ** 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 contentvoid 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;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.