2012-11-18 2 views
-1

저는이 이름이 a1.txt, a2.txt와 같은 거의 120 개의 파일을 가지고 있습니다 ... 저는 사용자로부터 int로 입력을 받아 특정 파일을 열어야합니다. 매크로를 사용하려고했지만 작동하지 않습니다. 여기에 내가 내가 "는이"와 매크로 부분의 나머지 부분을 무시까지 단지 읽는 것을 발견 생성 된 것을 CONCAT 볼 wprintf를 사용하는 경우 using.the 파일매크로를 사용하여 파일을 선택하십시오.

#define concat(d) L"a"#d".txt" 
. 
. 
. 
wchar_t *basefile = concat(d); 

유니 코드입니다 무엇이다. 여기에서 해결해야 할 것이 있거나 사용할 수있는 다른 방법이 있다면 알려주십시오. 감사합니다!

답변

1

주석에서 언급했듯이 컴파일 타임 매크로를 사용하여 런타임시 가져온 사용자 입력을 처리 할 수 ​​없습니다. 와이드 문자열에 대한

http://www.manpages.info/linux/sprintf.3.html

당신이 swprintf()을 사용할 수 있습니다 :

당신이 원하는 것은 라이브러리 함수 sprintf()는 원래 sprintf()에 문제가 있다는 것을

http://www.cplusplus.com/reference/clibrary/cwchar/swprintf/

주 그것은 출력 버퍼의 길이에 대한 인수를 취하지 않으며 잠재적으로 en을지나 문자열을 쓸 수 있습니다 스택 및 힙을 덮어 씁니다. 이 문제를 해결하는 sprintf()의 변형이 있습니다 (예 : snprintf()). 다행히 와이드 버전 swprintf()은 출력 버퍼 크기를 지정하는 인수를 취합니다.

0

이 번호가 실제로 런타임에 사용자 입력 인 경우 파일 이름을 작성한 다음 snprintf 정도가되어야합니다. 이 메소드가 컴파일 타임에 파일을 식별하는 것으로 알려진 숫자 (실제로는 토큰) 일 경우에만 메소드가 작동합니다.

그래서

#define D 42 

. 
. 
. 
wchar_t *basefile = concat(D); 

같은 작업을해야합니다.

관련 문제