변수에 문자열을 할당할 수 있나요?

hanhwi의 이미지

teach yourself C라는 책을 보고 있습니다. 변환 지정자에서 %c와 %s가 있던데 %c는 의미가 단일문자, 유형이 char, %s는 문자열 char 배열이라고 되어 있어서 질문드립니다. 책을 보면서 char를 처음에 문자라고 나와 있길레 한글이라던가 알파벳을 의미하는 것인가 했는데 범위가 숫자로 주어져 있어서 숫자라는 것을 알게 되었는데 이번에는 %s가 문자열이라고 나왔는데 이것은 알파벳 같은 것을 말하는 건가요?

Necromancer의 이미지

char는 1바이트 숫자변수입니다.
그리고 문자는 컴퓨터 내에서는 숫자로 바뀌어 저장되는데, 이게 코드입니다.

문자열은 이 코드가 배열처럼 죽 나열된 거죠.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

coremaker의 이미지

일반적으로 같은 형태로 물리적 메모리에 존재합니다..
타입에 따라서 2가지 정도를 다르게 지정한 것이죠..

1. type의 size
2. type의 i/o 방식

hanhwi님께서는 size 보다는 i/o 방식에 대해서 궁금하셨던 것 같습니다.
char 의 경우 윗분 말씀처럼 '일반적'으로 1 bytes 즉 8 bit에 해당하는 size를 지녔습니다..
화면에 변수를 출력하려는 경우 해당 변수의 타입을 출력문에서 알기 어렵기 때문에
"printf"를 사용할때 printf("%c", ch); 식으로 지정해 줍니다.
근데 사용하다보니 귀찮은 일이 발생했습니다.

char의 배열형을 출력문에서 사용하고자 했더니 %c 만 써서 표현하기위해서는..
loop 문을 사용해야하는 번거러움이 생겼죠..

그래서 %s 를 도입한겁니다.. 배열의 포인터를 넘기면,
배열에서 '\0' 이 있는 곳까지 쭉 출력하라는 간편한 기능을 삽입한거죠...

아울러 char 문도 실질적으로는 숫자로 표현되어있습니다.
단지 출력문에서 이를 적당한 모양으로 화면에 출력해 주도록 해주는 것이죠...
따라서 %d 로 출력하면 해당 문자에 대응하는 숫자를 보여줍니다..

더 자세한것은 ^^ 이것저것 해보면서 배워보세요..
문자열 입출력이 귀찮고 좀 복잡해보여도 재미있는 부분 중에 하나입니다..
가장 기초적인 부분이기도 하구요..

bookgekgom의 이미지

c 는 character (캐릭터)
s 는 string (스트링) 의 약자 입니다.

예) "word" 는 스트링이고 'w', 'o', 'r', 'd' 는 각각 캐릭터 입니다.

생각하시는 대로 스트링이 문자배열입니다.

word 란 한 스트링에는 w o r d '\0' 다섯개의 캐릭터가 들어가 있는거죠.

한글로 배우면 더 어렵습니다.

그냥 영어로 하면 C 나 프로그래밍 언어는 그냥 영어처럼 들립니다.

영어로 할수있다면 영어로 공부를 하세요.
----------------------------------------------------------------------------------------------------------------------------------

허접한 페도라 가이드 http://oniichan.shii.org

---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.

http://jihwankim.co.nr

여러 프로그램 소스들이 있습니다.

필요하신분은 받아가세요.

imyejin의 이미지

언어와 문자의 개념을 혼동하지 맙시다.

한국어(한국인이 쓰는 언어) - 영어(영국인 미국인 등이 쓰는 언어)
한글(한국어를 문자언어로 기록한 것) - 영문(영어를 문자언어로 기록한 것)

변수 이름이 알파벳이라 영단어를 연상하는 것이 도움이 되기는 합니다만,
그래도 책을 읽는 것은 번역만 완전 개판 오분전 수준만 아니라면
아무래도 모국어로 쓰여진 한국어판이 빨리 읽히는 건 사실이죠.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

cleol의 이미지

컴퓨터 메모리에는 항상 '수' 또는 여러개의 '수'를 묶은 집합이 저장된다고 생각하십시오.(사실은 전기 신호일 뿐이지만 '수'라고 생각하시는게 편합니다.)

그런데 실제로 사람들이 필요로 하는 프로그램은 '수' 말고도 '문자' 라든지 '소리' 라든지 '그림' 이라든지 하는 자료들을 다뤄야 할 필요가 있지요. 하지만 말씀드렸다시피 컴퓨터 메모리에는 '수' 만 저장할 수 있으므로 '문자' 나 '소리' 같은 것들을 '수'로 바꿔서 저장해야만 합니다. C 같은 프로그래밍 언어는 사람 입장보다는 기계 입장에서 설계된 언어이기 때문에 C를 사용하는 프로그래머도 기본적으로 모든 자료를 '수' 라는 입장에서 생각해야 합니다.

문자를 예로 들면 전통적으로 사용되던 ASCII 라는 방식에서 'a' 는 97 로, 'b' 는 98 로 바꿔서 저장합니다. ASCII 는 총 127개의 문자(알파벳, 숫자, 특수 기호들) 에 대한 '수' 표현을 정의하고 있습니다. (오래전에 미국에서 설계된 것이기 때문에 한글은 포함되어 있지 않습니다.)

C 언어의 char 변수형은 8bit 크기의 숫자를 담을 수 있는 변수형입니다. 즉 -128 부터 127 까지의 '수'를 표현할 수 있지요. 그렇다면 '문자'를 ASCII 방식으로 표현한 '수' 를 담기에 충분한 크기입니다. C 언어가 설계될 때에 ASCII 를 염두에 두고 설계됐기 때문에 8bit 크기의 자료형에 문자를 모두 담을 수 있다고 생각하고 8bit 크기 자료형에 'char(acter)' 라는 이름을 붙인 것입니다. 하지만 요즈음에는 영어 이외의 언어들을 지원해야할 필요가 생겼고, 한글이나 한자처럼 8bit 크기의 자료형으로는 모든 문자를 표현할 수 없는 문자체계가 있어서 char(acter) 라는 이름이 무색해졌습니다.

따라서 굳이 char 형을 문자를 표현하는 자료형이라고 생각하실 필요가 없습니다. 그냥 8bit 크기의 자료형이고 ASCII 방식으로 영문자를 수로 바꿔서 표현할 때 문자 하나를 저장하기에 딱 좋은 자료형이라고 생각하시면 됩니다. 실제로 C 언어를 사용해 한글을 다룰 때에는 char 변수에 문자 하나를 담을 수 없어서 다른 자료형을 사용하거나 char 배열에서 여러 개의 char 를 하나의 문자로 해석하거나 하니까요.

한글은 잊어버리고, 일단 영문만 염두에 두고 이야기를 이어나가면, '문자열' 은 문자를 특정한 순서로 늘어놓은 것이므로 문자를 수로 바꿔서 저장할 수 있는 자료형의 배열로 생각하면 편리하겠지요. 즉, "abc"라는 문자열을 나타내기 위해서 'a','b','c' 가 담긴 char 의 배열을 만드는 겁니다. 그런데 C 언어는 불행히도 배열의 크기를 모릅니다. 배열의 크기를 모른다는 의미는 C언어가 메모리를 다루는 방법에 대해 좀 더 공부하시면 알게될겁니다. 어쨌거나 그런 이유에서 C언어는 문자 배열의 끝에 '\0' 문자를 둬서 여기가 문자열의 끝이라고 알려주는 방식을 채택했습니다.

다시 말씀드리지만 C 언어는 기본적으로 모든 자료를 '수'라는 입장에서 다룹니다. 단지 크기가 얼마나 큰 수인가를 따져서 자료형을 구분할 뿐입니다. 즉

char x = 'a';

에서 x 에 담긴 값을 문자 'a' 로 해석하지 않는다는 뜻입니다. C 언어는 x 에 담긴 자료를 97 이라는 수로 해석합니다. 그래서

char y = x + 1;

이라고 하면 y 는 98 이 됩니다. 만약에 'a' 를 문자로 '해석'한다면 문자에 수를 더한다는 자체가 말이 안되는 거지요. 하지만 이를 화면에 출력하기 위해서

printf("%c", x);

라고 하면 화면에는 'a'가 출력됩니다. 이 경우에는 "%c" 를 통해서 x 를 ASCII 방식으로 '수'로 바꿔서 저장한 '문자'로 "해석"하라고 특별히 알려줬기 때문에 그런겁니다. 문자열도 기본적으로 단순히 '수'의 배열입니다. 하지만 printf 를 사용할 때 %s 를 써서 이건 수의 배열로 해석하지 말고 문자열로 해석하라고 특별히 알려주는 겁니다.

C 처럼 기계 입장에서 언어를 설계하지 않고 좀 더 사람 입장에서 설계하면 char 라는 자료형이 문자를 나타낸다고 할때

char x = 'a';
char y = x + 1;

같은 구문에서 문자와 수는 서로 더할 수 없다는 에러를 내는 언어도 생각해볼 수 있습니다. 하지만 좀 더 사람 입장에서 설계된 (실제로 있는) 다른 언어들에서도 문자를 수로 다루면 편리한 경우가 많아서 상황에 따라서 문자로 다루기도 하고 수로 다루기도 합니다. 그렇더라도 그런 언어들에서는 C 처럼 기본적으로 모든 자료를 수로 다루지는 않기 때문에 printf 같은 출력문에서 굳이 문자로 해석하라고 %c 같은 것을 써서 알려주지 않아도 기본적으로 문자로 해석하는 경우가 많습니다.

imyejin의 이미지

C에서는 메모리 영역에 문자열을 할당하고,
그 메모리의 첫 주소를 문자열 포인터 변수에 할당합니다.

혹시 C로 프로그래밍을 처음 공부하시려는 것이라면,
특히나 독학하고 계시다면, 개인적으로는 뜯어말리고 싶습니다 -_-;;
프로그램의 논리적 흐름보다 밑바닥에 있는 기계의 상태를 생각하느라 머리에 김나는 수가 있거든요.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

snowall의 이미지

C로 프로그램을 만들면 프로그램의 논리적 흐름보다 기계의 상태를 더 따져야 하나요?

--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

Scarecrow의 이미지

C언어에는 문자열(string) 변수라는게 없습니다.
C언어에서 string은 "문자(char)의 배열"로 나타냅니다.

cppig1995의 이미지

여러분, C++ 만세.

#include <iostream>
#include <string>
 
using std::string;
using std::cout;
using std::endl;
 
string s1("Ace"), s2(" 64");
s1 += s2;
cout << s1 << endl;

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

댓글 달기

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