문자열 배열과 포인터의 초기화에 대한 질문입니다.

ktd2004의 이미지

먼저 질문을 드리기 전에 제가 알고 있는 내용을 적어보겠습니다.

1번 코드

char a[6] = "12345";

- 스트링의 끝에 NUL이 자동으로 추가되는지요?
- 배열 a의 데이타의 수정은 가능한지요?

2번 코드

char a[] = "12345";

- 이 경우에는 스트링의 끝에 NUL이 자동으로 추가되는지요?
( sizeof(a)는 6으로 출력됩니다.)
- 배열 a의 데이타의 수정은 가능한지요?

3번 코드, 전혀 문제없는 코드.

char a[6];
strcpy( a, "12345");

4번 코드. 전혀 문제없는 코드

char *a;
a = (char*)malloc(6);
strcpy( a, "12345");
...
free(a);

5번 코드.

char *a = "12345";

포인트 a의 값을 수정할 수 없다.
따라서 const char *a = "12345" 식으로 초기화하는 것이 낫다.

6번 코드.

char *a;
strcpy( a, "12345");

메모리가 할당되지 않았음. 잘못된 코드.

제가 궁금하게 생각하는 부분은 1,2,3번의 경우입니다.
즉, 배열을 다음과 같이 초기화 했을 때.

char a[] = "12345";

- 끝에 NUL이 추가되는지? (추가됨)
- 수정이 가능한지? (가능함.)
- sizeof(a)의 결과는? (6)

이런 경우에는

char a[] = {'1','2','3','4','5'};

- 끝에 NUL이 추가되는지? (추가되지 않음)
- 수정이 가능한지? (가능함)
- sizeof(a)의 결과는? (아마 5)

그럼 답변 부탁드리겠습니다. 즐거운 주말되시기를...

cinsk의 이미지

먼저 null character는 '\0'로 표기합니다. (참고로 NUL은 ASCII code에서
0번 control character를 가리키는 표현입니다. C 언어에서 NUL이란 용어는 쓰지 않습니다. 어차피 수치로는 같은 0이긴 하지만..) 따라서 '\0' 또는 그냥 널 문자(null character)라고 쓰기 바랍니다.

Quote:

char a[6] = "12345";

- 스트링의 끝에 '\0'이 자동으로 추가되는지요? 예.
- 배열 a의 데이타의 수정은 가능한지요? 예
Quote:

char a[] = "12345";

- 이 경우에는 스트링의 끝에 '\0'이 자동으로 추가되는지요? 예
( sizeof(a)는 6으로 출력됩니다.)
- 배열 a의 데이타의 수정은 가능한지요? 예
cinsk의 이미지

참고로

char a[5] = "abcde";

의 경우, '\0'이 자동적으로 붙지 않습니다. (즉, 올바른 문자열이 아닙니다.) 당연 sizeof(a)는 5입니다.

char a[5] = "abcdef";

경우도 '\0'이 자동적으로 붙지 않고, 이 경우는 경고(또는 에러)가
발생합니다. 초기값으로 준 문자열 상수(string literal)가 배열의 크기보다 더 크기 때문입니다.

댓글 달기

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