문자열 중간에 NULL 문자가 포함된 경우의 처리 방법....
글쓴이: tkdghk9461 / 작성시간: 목, 2019/02/07 - 4:38오후
C++ 문자열 처리 중에 궁금한 것이 생겨 질문 남깁니다..
1. NULL (0x00) 값을 포함한 문자열을 windows 클립보드에 복사하는 방법
- 구글링 해보니 안된다는 말이 대부분이고, binary clipboard를 이용해보라고 넌지시 던지는 글만 있었음.
2. C기반 파일 입출력 시, NULL값에서 읽기 중단하지 않고, 계속 읽게하는 방법 (원래는 NULL값에서 문자열 terminated로 인식하여 종료함)
- fgetc로 하나씩 읽으면서 특정 문자가 나왔을 때 읽기를 종료하게 하고 싶음.. fgetc 함수 자체를 불러와서
고쳐야 하는 것인지..?
Forums:
중간에 널문자가 있을때
그냥 포문 돌리시면 처음부터 끝까지 접근은 가능합니다.
중간에 널문자가 있을때
그냥 포문으로 돌리시면 처음부터 끝까지 접근은 가능합니다.
답변 감사합니다.
CString aa = "";
FILE *fl;
char s;
fl = fopen(szPathName, "r");
for(int j=0; j<602; j++)
{
s = fgetc(fl);
aa += s;
}
fclose(fl);
일단 이렇게 for문 돌려서 aa 찍어보니, 해당 null 문자에서 끝난 상태로 저장된 것을 확인했습니다...
문자열 사이에 hex값으로 0x00 이 있으니 이런 결과가 발생하는 중이네요..
현재 확인 중입니다.
for문에서 NULL 값이 캐치될 경우 위치를 반환하게 해보았는데, 정확하게 딱 해당 NULL 위치를 모두 반환하였습니다. 확실히 파일 내용이 읽히고 있는건 맞는 것 같은데... MessageBox로 띄우거나 SetDlgItemText로 출력하면 잘리는 것 같네요.. NULL을 중간에 끼워넣고 있는 Char 배열을 출력하는 방법이 어디 없을까요?
정 그러시면 다른 문자열 클래스나 char 배열을
정 그러시면 다른 문자열 클래스나 char 배열을 마련한 다음에, 읽은 내용을 그대로 복사하되 NULL 캐릭터의 경우만 다른 문자(스페이스라거나)로 대체하여 복사하든가 아예 복사하지 않든가 해서 널 캐릭터가 없는 문자열을 만들어 출력하면 어떨까요. 뭐 원본 배열을 수정해도 된다면 그냥 for 루프 돌면서 널만 찾아서 바꿔치기 하든가...
좋은 하루 되세요!
이런 거를 원하시나요?
이런 거를 원하시나요?
도움 감사합니다.
raymundo 님께서 알려주신 방법으로 해결하였습니다.
char 배열에 집어넣은 뒤에, 출력하는 부분에서만 해당 NULL을 space로 바꿔서 출력하고.
실제 가공하는 데이터는 space로 바꾸기 전 배열을 그대로 사용하였습니다.
답변 달아주신 모든 분들의 도움 감사합니다.
댓글 달기