C언어 배열과 문자열

Pi11ar의 이미지

배열은 NULL을 붙이지 않는데 문자 배열은 NULL을 사용하나요?
아직도 배열에 개념이 잡히지 않네요...
너무 쉬운 질문이라면 죄송합니다..

commonJS의 이미지

c에서의 배열이라 함은 '데이터 타입이 같은 것(이게 중요합니다.)들을 일렬로 늘어놓은 것' 이라 생각하시면 됩니다. 모든 프로그래밍 언어가 같은 유형을 내포하고 있는지는 모르겠습니다만 일반적으로 c에서는 '문자 배열(따로 문자열 타입이 존재하지 않으므로)' 끝에 널 문자를 포함(그렇게 하지 않으면 해당 문자열이 어디까지가 끝인지 해당 컴파일러가 알 수 없으므로)하도록 규정하고 있는 것으로 알고있습니다. 따라서 문자 배열 생성 시 널 문자를 고려하여 길이를 선언해야 하겠죠.

만약 apple이란 문자열을 저장한다고 치면, 총 6의 길이를 가진 배열이 필요한 이유가 이런 이유 때문이죠.

익명 사용자의 이미지

문자열 배열이 문자열의 끝을 알기 위해서 NULL을 사용합니다.
K 문자는 문자가 이미 하나라는 것을 알기 때문에 굳이 NULL 문자를 쓰지 않아도 됩니다.
그러나 KLDP 라는 문자열은 그 끝을 알 수 없기 때문에 NULL 문자로 지정해 주는 것입니다.

배열 얘기로 설명해 드리겠습니다.

배열 크기가 10일때의 경우를 가정합니다.
문자 K를 읽습니다.
배열의 첫번째만 사용하겠죠. 문자이기 때문에 하나 이상 읽어들일 이유가 없습니다.

문자열 KLDP를 읽습니다.
배열의 네번째까지 사용할 것입니다. 그런데 KLDPress! 가 나왔습니다.
문자열 KLDP를 출력하려고 했는데? 고민에 빠지는 거죠.

문제는 이렇습니다.
[K] [L] [D] [P] [r] [e] [s] [s] [!] [NULL]
프로그램이 문자열의 끝을 알 수 있는 방법은 NULL 문자 뿐입니다.
우리가 문자열의 끝에 NULL을 두어야 하는 이유죠.
[K] [L] [D] [P] [NULL]
이었다면 정상적으로 출력됩니다.

만약 문자열의 길이만큼만 배열의 크기를 제한하겠다면, 문자열의 길이에 1을 더해주세요.
마지막에 NULL 문자가 들어가야 합니다.

익명 사용자의 이미지

문자열이 아닌 일반 배열의 경우라 하더라도 데이터의 개수를 알고 있어야 합니다.

C언어 표준 문자열의 경우는 데이터의 개수 대신 문자열의 끝에 '\0' ( (char)00 의 의미 => 0번 문자 == 널 문자 ) 를 쓰기로 한 것이고,

아예 길이를 고정한 문자열 형태로 쓸 수도 있고, COM의 BSTR(Basic String)처럼 헤더를 두어 헤더에 길이 정보를 포함시킬 수도 있습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.