2010-06-21 4 views
1

다른 이름으로 파일을 루프에 저장하고 싶습니다. 나는 위의 코드가 작동하는 파일의 매개 변수로 문자를 필요로하는 라이브러리 ...int를 문자열 변환

for(int i=0;i<nodes;i++){ 
for(int j=0;j<nodes;j++){ 
    char a[20]="test"; 
    char c[20]="xout.dat"; 
Lib::SaveFile(_T(a), _T(c)); 
}} 

를 사용하지만, 내가 얻을 것 때문에 해당 정수로 xout.mid의 이름을 변경하려면 나는() 함수

+3

숯불은 하나의 문자입니다. 여러 개의 문자로 구성된 문자열을 의미합니다. – Sjoerd

+0

예! 그리고 그 이유는 내가 구글에서 이것을 찾지 못했기 때문이다 ... –

+0

'_T' 매크로가 문자 배열에서도 작동합니까 ?? – sbi

답변

2
char name[30]; 
sprintf(name, "%d-%d-%s", i, j, c); 
+0

오 고마워요 ... "hello world"다음에 교과서 예제 2 인 것 같습니다. char와 string의 차이점이있는 몇 가지 문제가 있습니다. –

+1

현재 아키텍처에서, erm, "chance"는 "name"을 오버플로합니다. '한계가 있지만, 일반적으로'sprintf()'를 사용하면 경고가된다고 생각합니다. – sbi

+0

안녕하세요, 일반적으로'[f/s] printf' 계열의 함수를 C++에서 사용하지 마십시오. 버퍼 오버플로 문제가 발생하여 응용 프로그램이 다른 위치에서 중단되고 문제를 추적하기 어렵습니다. 위의 코드는 크래시를 생성하지 않지만 대신 안전한 코드를 사용하는 것이 좋습니다 ('std :: o [f/string] stream' 클래스 패밀리). – utnapistim

-1

사용 sprintf와 i_j_xout.dat 이름의 문자를 좀하고 싶습니다 약 30

0에서 다른 보셨을와 J의 이동과 J 파일을 * :

for(int i=0;i<nodes;i++){ 
for(int j=0;j<nodes;j++){ 
    char c[20]; 
    char a[20]="test"; 
    sprintf(c, "%d_%d_xout.dat", i, j); 
Lib::SaveFile(_T(a), _T(c)); 
}} 
+0

'c '가 동적으로 할당되는 이유는 무엇입니까? 나는'Lib :: SaveFile()'을 모른다. 그러나 그것이 던지면,이 누수가있다. 자동 변수를 사용하면이를 피할 수 있습니다. – sbi

+0

편집 됨, 감사합니다. – PeterK

2

대신 문자 버퍼와의 sprintf를 사용하는 표준 : : 문자열과 표준 : : ostringstream을 사용하는 것이 좋습니다 :

#include <sstream> 
#include <string> 

[...] 

std::basic_string<TCHAR> nameA = _T("test"); 
std::basic_ostringstream<TCHAR> nameC; 
for(int i=0;i<nodes;i++){ 
    for(int j=0;j<nodes;j++){ 
     nameC.str(_T("")); 
     nameC << i << "_" << j << "_xout.dat"; 
     Lib::SaveFile(nameA.c_str(), nameC.str().c_str()); 
    } 
}