문자열 중간에 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 루프 돌면서 널만 찾아서 바꿔치기 하든가...
좋은 하루 되세요!
이런 거를 원하시나요?
이런 거를 원하시나요?
while(EOF) { if((ch = fgetc()) != 0 || ch != 'exit value) buff[i] = ch; else if (ch == 0) buff[i] = 'space' or else; else break; }도움 감사합니다.
raymundo 님께서 알려주신 방법으로 해결하였습니다.
char 배열에 집어넣은 뒤에, 출력하는 부분에서만 해당 NULL을 space로 바꿔서 출력하고.
실제 가공하는 데이터는 space로 바꾸기 전 배열을 그대로 사용하였습니다.
답변 달아주신 모든 분들의 도움 감사합니다.
댓글 달기