문자열 중간에 NULL 문자가 포함된 경우의 처리 방법....

tkdghk9461의 이미지

C++ 문자열 처리 중에 궁금한 것이 생겨 질문 남깁니다..

1. NULL (0x00) 값을 포함한 문자열을 windows 클립보드에 복사하는 방법
- 구글링 해보니 안된다는 말이 대부분이고, binary clipboard를 이용해보라고 넌지시 던지는 글만 있었음.

2. C기반 파일 입출력 시, NULL값에서 읽기 중단하지 않고, 계속 읽게하는 방법 (원래는 NULL값에서 문자열 terminated로 인식하여 종료함)
- fgetc로 하나씩 읽으면서 특정 문자가 나왔을 때 읽기를 종료하게 하고 싶음.. fgetc 함수 자체를 불러와서
고쳐야 하는 것인지..?

lalupo20의 이미지

그냥 포문 돌리시면 처음부터 끝까지 접근은 가능합니다.

lalupo20의 이미지

그냥 포문으로 돌리시면 처음부터 끝까지 접근은 가능합니다.

tkdghk9461의 이미지

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 이 있으니 이런 결과가 발생하는 중이네요..

tkdghk9461의 이미지

for문에서 NULL 값이 캐치될 경우 위치를 반환하게 해보았는데, 정확하게 딱 해당 NULL 위치를 모두 반환하였습니다. 확실히 파일 내용이 읽히고 있는건 맞는 것 같은데... MessageBox로 띄우거나 SetDlgItemText로 출력하면 잘리는 것 같네요.. NULL을 중간에 끼워넣고 있는 Char 배열을 출력하는 방법이 어디 없을까요?

raymundo의 이미지

정 그러시면 다른 문자열 클래스나 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;
}

tkdghk9461의 이미지

raymundo 님께서 알려주신 방법으로 해결하였습니다.
char 배열에 집어넣은 뒤에, 출력하는 부분에서만 해당 NULL을 space로 바꿔서 출력하고.
실제 가공하는 데이터는 space로 바꾸기 전 배열을 그대로 사용하였습니다.
답변 달아주신 모든 분들의 도움 감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.