2017-10-02 4 views
0

GetFullPathName 및 WinExec을 사용하고 있습니다.문자열의 문자를/문자로 어떻게 바꿀 수 있습니까?

WinExec에서 외부 프로그램을 제대로 호출하려면 프로그램의 전체 경로가 있어야합니다.

GetFullPathName는()은 다음 ...

C:\job\curr01\help\hlp.exe 

내가 WinExec이 경로를 사용

은, 아무 일도 발생하지 반환합니다. WinExec가 기대되기 때문
C:/job/curr01/help/hlp.exe 

내가 이것을 알고 ... 때문에 내가 하드 코드 문자열 "C : /job/curr01/help/hlp.exe"경우가 잘 작동하고 열립니다) WinExec (로를 프로그램.

내 질문에 '\'에 대한 문자열을 스캔하고 '/'로 바꾸려면 어떻게해야합니까?

는 '\'나는 helpPath = 아래의 특수 문자와 작동하지 않습니다 다음 ...

'C : \ 작업 \ curr01의 \ 도움말 \의 hlp.exe은'

for (char* p = helpPath; p = strchr(p, "\"); ++p) { 
    *p = "/"; 
} 

C는있다 특수 문자이기 때문에 "\"문제. 나는 ""\ ""과 "//"시도했지만 아무것도 작동하지 않는 것 같습니다.

+0

이것은 내가 원하는 것의 반대입니다. \ – user3622460

답변

3

이 시도 :

if (*p == '\\') //Escape the character '\' 
    *p = '/'; 
+0

으로 대체하는 광고를 확인하는 것은 훌륭합니다. 여전히 curr01 다음에/Program/Bin을 경로에 추가했기 때문에 파일을 제대로 열지 못했지만 다른 문제가 있습니다. 감사합니다 – user3622460

+0

니스, 해결할 수있는 게시물을 설정하는 답변을 유효합니까? 문제를 해결할 수 없다면 행운을 빈다. 질문을 게시하십시오.) – YaatSuka

0

를 정말 기대 "/"디렉토리 분리로 WinExec을 생각하지 않습니다. Win32 API 호출에서 "기본"구분 기호는 여전히 "\"라고 생각합니다. 일부 Win32 API 함수에 "/"에 대한 지원이 추가되었으므로 Windows를 제외한 모든 사용자에게 익숙한 사람들이 쉽게 사용할 수 있으며 C 문자열 리터럴에서 "\"사용으로 인해 발생하는 문제를 방지 할 수 있습니다. . 아니면 Microsoft 만 이해할 수있는 다른 이유 때문일 수도 있습니다.

어쨌든 "\"의 이스케이프 효과를 수정해야합니다. 아마도 두 배가되는 것일 것입니다 : c:\\path\\to\\my\\exe. 이것은 (IIRC)가 일부 장소에서는 작동하지만 다른 곳에서는 작동하지 않는 슬래시를 사용하는 것보다 Windows Y 방식으로 문제를 해결하는 방법입니다.

이 답변은 실제로 새로운 답변이 아니지만 Windows 경로와 비슷한 문제가있는 다른 질문을 한 것으로 알고 있습니다.

관련 문제