2014-07-10 3 views
0

3 가지 유형이 포함 된 구조가 있으며이를 내 txt 파일에 쓰려고합니다. 결국 내가 내 파일을 열 때 나는 정보를 contatins하고 정수는 2 진 기호로 변환되는 chars를 얻는다. 나는 함수를 사용했다.ofstream을 사용하여 파일에 쓰기

sprintf_s(router, "%d" , route[i].route_number); 

내 int를 char로 변환했다. 그리고이 모든 int가 변형 된 후에 나는 내 자리를 볼 수 있지만 chars 옆에 여전히 쓰레기가 있습니다. 여기 내 코드가있다. 내가 뭘 잘못하고있어?

ofstream file_not_binary("D:\\nobin.txt",ios::out); 
char router[10]; 
for(int i=0;i<n;i++){ 
sprintf_s(router, "%d" , route[i].route_number); 
file_not_binary.write((char*) &router,sizeof(router)); 
file_not_binary.write((char*) &route[i].destination ,sizeof(router)); 
file_not_binary.write((char*) &route[i].route_number, sizeof(router)); 
    } 

나는 이런 식으로 뭔가를 얻을 : 23 юююююююrivne НННН 키예프 Н394 ююююююrivne ННННЉ ээээ«« 내가 입력 : 23 리브 네의 키예프, 394 리브 네를.

+1

포인터에 Ixnay가 심각하게 전송됩니다. 포인터 캐스트가 필요하다고 생각되면 틀렸거나 API가 손상된 것입니다. –

+0

마지막 두 개의 sizeof (라우터)는 각각 sizeof (route [i] .destination) 및 sizeof (route [i] .route_number)이어야합니다. – 0x499602D2

+0

null 터미네이터 뒤에 오는 'router'에서 정크 메일을 작성하기 때문에 쓰레기가 생깁니다. 이것은 나쁜 생각이지만 파일이 텍스트 모드에서 열려있을 때 특히 좋지 않습니다. –

답변

0

는 다음 코드를

file_not_binary.write((char*) &router,sizeof(router)); 
to 
file_not_binary.write((char*) &router,strlen(router)); 

sizeof의 (라우터) 배열 하지만 나 strlen (라우터)의 사이즈가 행 [I] .route_number의 길이가 수정한다. 배열이 아닌 파일에 route_number (int)를 쓰려고합니다.

관련 문제