开发者社区> 问答> 正文

C++如何拼接LPWSTR类型字符串??报错

以下是在网上找到的C++源码:

#include <Windows.h>

int WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd)
{
	LPWSTR *szArgList;
	int argCount;

	szArgList = CommandLineToArgvW(GetCommandLine(), &argCount);
	if (szArgList == NULL)
	{
		MessageBox(NULL, L"Unable to parse command line", L"Error", MB_OK);
		return 10;
	}
	for (int i = 0; i < argCount; i++)
        {
            //这里希望能将szArgList中的值拼接为字符串
            //MessageBox(NULL, szArgList[i], L"Arglist contents", MB_OK);
	}
	LocalFree(szArgList);
	return 0;
}


目的,传入路径到以上程序中,拼接为字符串后复制到剪贴板。

比如:

假设编译后的程序为 a.exe

在 CMD 中输入:

a.exe c:\a c:\b
剪贴板中的内容更新为

c:/a
c:/b
要求:  路径间有换行,“\”替换为“/”

请问,应该怎么做?如果能直接给出源码最好,谢谢!


本人没系统学过C++,一直用的脚本语言,但因故需要实现这个小程序,主要弄不懂szArgList中的值如何拼接,编译器总报错。









展开
收起
爱吃鱼的程序员 2020-06-08 20:03:02 1492 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
    #include<iostream>#include<Windows.h>//复制数据至剪切板(http://www.cnblogs.com/xuan52rock/p/6061155.html)BOOLCopyToClipboard(constchar*pszData,constintnDataLen){if(::OpenClipboard(NULL)){::EmptyClipboard();HGLOBALclipbuffer;char*buffer;clipbuffer=::GlobalAlloc(GMEM_DDESHARE,nDataLen+1);buffer=(char*)::GlobalLock(clipbuffer);memcpy(buffer,pszData,nDataLen);::GlobalUnlock(clipbuffer);::SetClipboardData(CF_TEXT,clipbuffer);::CloseClipboard();returnTRUE;}returnFALSE;}intmain(intargc,char**argv){if(argc<=1){std::cout<<"nopathinput"<<std::endl;return-1;}std::stringstr;constintmax_len=1024;charbuff[max_len]={0};for(inti=1;i<argc;i++){size_tlen=strlen(argv[i]);if(len>=max_len-1)//1for\n{std::cout<<"pathtoolong"<<std::endl;return-1;}memcpy(buff,argv[i],len);buff[len]='\n';//\r\nforwindows??buff[len+1]=0;//stringendfor(size_tpos=0;pos<len;pos++){if('\\'==buff[pos])buff[pos]='/';}str.append(buff);}CopyToClipboard(str.c_str(),str.length());return0;}


    感觉你的需求比较奇怪。

    1.你用的是win编程,不是C++

    2.这种小工具应该是直接用std::cout输出,需要时重定向到文件。以满足各种需求。


    回复 @changnet:是的,在控制台中调用不弹出窗口,我直接双击exe文件了...回复 @ZeronoFreya:程序肯定是没有窗口的。有窗口肯定是你运行方式的问题。比如你用vs直接运行。编译了一下,出现了控制台窗口,我希望能后台运行,所以采用的WinMain谢谢,的确需求很奇怪,但这是用在totalcommand中的,它输出的路径是用“\”表示,但到了程序代码里会被当做转移符处理,所以需要替换成“/”。所以,这是特定需求~

    wcscat_s 类似的字符串连接函数

    报错:没有与参数列表匹配的重载函数"wcscat_s"实例
    2020-06-08 20:03:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载