인프런 커뮤니티 질문&답변

젬싼jamssan님의 프로필 이미지
젬싼jamssan

작성한 질문수

홍정모의 따라하며 배우는 C언어

4.3 문자열이 메모리에 저장되는 구조

str3를 출력하던중 생긴 오류와 궁금증

작성

·

263

0

#include <inttypes.h>


char str3[10] = "Hello, world"//array size is not enough
   
printf("%s\n", str3);
결과값
Hello, worHi
질문1: 비쥬얼스튜디오코드를 사용하여 코딩중인데 저는 영상처럼 "Hello, world" 커서를 대었을
 때 교수님의 화면처럼 13이 뜨지 않네요 코드라서 안 뜨는 건가요??
 저는 (char [10])"Hello, wor" 이런식으로 뜹니다
질문2: "Hello, world";의 위치에 커서를 대었을 때는 (char [10])"Hello, wor" 이런 식으로 
 미리보기가 뜨는데 왜 미리보기와 다른 Hello, worHi이 출력되는 것이고, 결과값 중의 
 'Hi'는 왜 출력이 되는 것인가? 
질문3: 영상과 달리 제 코드는 어떻게 10으로 정해진 사이즈를 넘어서 출력이 될 수 있는 것인가??
 
항상 잘 듣고 있습니다 ㅎㅎ 이해하기 쉽게 잘 설명해 주셔서 감사해요
코드 전문

#include <stdio.h>




int main()

{   

    int a = 1;

    int int_arr[10] = { 0123456 ,7 ,8 ,9 };



    printf("%i %i %i\n"int_arr[0], int_arr[1], int_arr[9]);



    //printf("%i\n", int_arr[10000]); int_arr[10]이므로 9를 넘어선안됨 [지정사이즈 넘으면 안됨]

    

    char c = 'a';

    char str1[10] = "Hello"//null character Hello(\0)

    char str2[10] = { 'H''i'}; //문자열 저장하는 방식이 두가지



    printf("%c\n", c);

    printf("%s\n", str1);

    printf("%s\n", str2);



    printf("%hhi %hhi %hhi %hhi %hhi\n",

    str2[0], str2[1], str2[2], str2[3], str2[4]); //배열로 출력시 강제로 0을 출력시킴



    char str3[10] = "Hello, world"//array size is not enough

    char str3[20] = "Hello, \0world";

    printf("%s\n", str3);

    printf("%s\n"str3[10]);

    printf("%s\n"str3[11]);




    return 0;

}


답변 2

0

(memo. 뒷 분들을 위해서...)

해당 코드 전문을 직접 복사해서 테스트해보았으나, 컴파일 에러 발생.

문제점1)

1. char 메모리 공간이 [10]인데, 대입시킨 해당 문자열은 10을 넘어감으로 컴파일 에러가 발생한다. 따라서 결과값을 도출해낼수도 없는 상태인데, 결과값이 "Hello, worHi"로 나온 것은 무언가 작성하신 코드에 문제가 있어 보입니다. VS버전의 차이인지 모르겠으나, 신기하게도 강제 실행이 되어 출력문을 아래에 남깁니다.

문제점2)

2. char str3가 중첩되어 컴파일 에러가 발생.

맨 위 사진에 보시다시피, str3[10]과 str3[20]으로 str3가 두 개 존재함으로 컴파일 에러 발생합니다. 따라서 컴파일 실행을 시킬 수 없는 상태. 마찬가지로 결과값을 출력할 수 없는 상태.

감사합니다 :)

0

홍정모님의 프로필 이미지
홍정모
지식공유자

1. 2. 비주얼 스튜디오 코드는 문서 편집기에 가깝습니다. 비쥬을 스튜디오는 IDE라서 여러가지 보조 기능이 많습니다.

3. 이유는 직접 찾아보셔야할 것 같네요. 여러가지로 실험해보시는 것을 권장합니다.

젬싼jamssan님의 프로필 이미지
젬싼jamssan

작성한 질문수

질문하기