OpenFileName中的lpstrFilter是过滤器,应该如"Text\0*.txt\0"的格式但是现在的字串符"Text"是保存在argv[1],"*.txt"是保存在argv[2]中,如何把这两个合并成argv[1]+"\0"+argv[2]+"\0"?

解决方案 »

  1.   

    MFC吗?
    CString str;
    str.Format("%s\\0%s\\0",argv[1],argv[2]);
    非MFC
    char szText[256];
    sprintf(szText,"%s\\0%s\\0",argv[1],argv[2]);
      

  2.   

    感谢LS的回答,但是问题没有解决我的意思是要OFN.lpstrFilter="Text\0*.txt\0"这样,后面不能有多余的字符(char szText[256]有多余的字符,会出现问题)
      

  3.   

    还是不行,我把代码贴出来,大家看看是哪里有问题
    char fliter[256];
    ZeroMemory(&ofn,sizeof(OPENFILENAME));
    szFile[0]='\0';
    ofn.lStructSize=sizeof(OPENFILENAME);
    ofn.lpstrFile=szFile;
    ofn.nMaxFile=MAX_PATH;
    ofn.Flags=OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;
    sprintf(fliter,"%s\0%s\0",argv[1],argv[2]);
    fliter[strlen(fliter)]='\0';
    ofn.lpstrFilter=fliter;
    GetSaveFileName(&ofn);
    printf("%s\n",ofn.lpstrFile);
      

  4.   

    sprintf(fliter,"%s\\0%s\\0",argv[1],argv[2]);
      

  5.   

    不行啊,lpstrFliter的格式是:argv[1]+NULL字符(我用\0)+argv[2]+NULL字符但是如果用\\0的话就不是NULL字符了,该怎么办?
      

  6.   

    argv[1]+NULL字符(我用\0)+argv[2]+NULL字符 
    ==NULL字符时什么东西?ASCII码为0的字符串终止字符么?
    你的sprintf(fliter,"%s\0%s\0",argv[1],argv[2]);
    有什么问题?
      

  7.   

    有问题,sprintf(fliter,"%s\0%s\0",argv[1],argv[2]);之后fliter就从第一个\0处断掉了
      

  8.   

    sprintf(fliter,"%s%c%s%c",argv[1],'\0',argv[2],'\0'); 
      

  9.   

    那是当然了,fliter如果当字符串用,肯定会截掉啊。因为\0是字符串终止符啊。
      

  10.   

    只有当作为二进制数据用时才不会这样。当成字符串时肯定是这种结果。
    ========
    OpenFileName中的lpstrFilter是过滤器,应该如"Text\0*.txt\0"的格式 
    ==你这个规则是从哪里看到的呢?为什么是“应该”?
      

  11.   

    应为我写OFN.lpstrFliter="Text\0*.txt\0"才是正确的啊
      

  12.   

    过滤的串应该是Text|*.txt|这样子吧。
      

  13.   

    char szText[256];
    memset(szText, 0, sizeof(char) * 256);
    sprintf(szText,"%s\0%s\0",argv[1],argv[2]); //这此注意,如果是最后一个过滤器,需要以\0\0结尾!
      

  14.   

    szText需要初始化,没初始化导致不全部都是0, 而filter是以连续两个结尾的。