14581

틀렸던 거 내일 정리해야지.,.

#include <stdio.h>

int main (void){
    char str[20];

    scanf("%s", &str);
    printf(":fan::fan::fan:\n:fan::%s::fan:\n:fan::fan::fan:", &str);

    return 0;
}


엉.. 어제의 내가 미뤘으니까 오늘의 내가 해야지..

#include <stdio.h>

int main (void){
    char str;

    scanf("%s", &str);
    printf(":fan::fan::fan:\n:fan::%s::fan:\n:fan::fan::fan:", &str);

    return 0;
}

vscode에서는 출력이 잘됐기 때문에 제출해도 괜찮을 줄 알았다 ㅎ

근데 백준에 제출했을 때는 런타임 에러가..ㅜㅜㅜ
일단  char 자체의 성질을 다시 한번 상기시켜 봤을 때  
자료형 char가 저장할 수 있는  크기는 1byte 크기이다. 
영어 기준 1byte는 1글자이기 때문에 한 글자만 저장할 수 있다..
그래서 백준에서 런타임 에러 (segfault)가 뜬 거 같다  (어 ,,, 뇌피셜이긴 함 ㅎ)
근데,, segfault가 뭔지 잘 몰라서 한 번 알아봤는데,

 

 

 

이렇게 뜨길래 인터넷에 한 번 검색해 봤는데, 좀 더 자세히 다뤄야 할 것 같아서 C언어 공부에서 자세히 다뤄 볼 예정!

 

간단 요약으로는 메모리에 접근하려고 할 때 허용되지 않는 메모리 영역을 접근하려고 시도할 때 발생하는 오류라고 한다. 

(출처: https://velog.io/@ceusun0815/%EC%84%B8%EA%B7%B8%EB%A9%98%ED%85%8C%EC%9D%B4%EC%85%98-%EC%98%A4%EB%A5%98Segmentation-Fault%EB%9E%80-C%EC%96%B8%EC%96%B4)

최대한  gpt 안 써보려고 했는데 ㅎㅎ VSCode에서는 왜 되는 건지 궁금해서 ㅎ...

📌 1. char str; vs char str [20];

  • char str; → 문자 하나만 저장할 수 있는 1바이트 공간
  • char str[20]; → 문자열(문자 여러 개 + 널 종료 문자 \0)를 저장할 수 있는 20바이트 배열

🔴 문제점

scanf("%s", &str);에서 %s는 문자열 입력을 의미하며,
문자 여러 개를 \0까지 저장해야 합니다. 하지만 str은 단 1바이트밖에 없어요.

이건 마치 종이 한 장 위에 소설책 전체를 복사하려는 것과 같아요.
✅ 즉, **메모리 침범(Segmentation Fault)**이 발생하는 거죠.

🧪 2. 왜 VSCode에서는 되는 것처럼 보일까?

  • 로컬 환경에서는 운 좋게 str 뒤에 우연히 접근 가능한 공간이 있었던 것일 수 있어요.
  • 하지만 그건 진짜 “우연”입니다.
    운영체제에 따라 달라지고, 입력 길이에 따라 언제든지 터질 수 있는 시한폭탄이에요.

VSCode에서 됐던 게 우연이라니 ㅋㅋㅋ ㅜㅜ
근데 gpt 피셜이라 좀 더 정확하게 알고싶다... ㅜㅜ 근데 인터넷에 쳐봐도 모르겠다 ㅎ,,ㅜㅜㅜ 

오늘은 백준 하나만 풀고 

C언어 공부를 작성해야겠다..ㅎ ㅜㅜ

'백준' 카테고리의 다른 글

[ 백준 / C ] 22193번 : Multiply  (0) 2025.07.04
[ 백준 / C ] 2393번 : Rook  (0) 2025.07.03
[ 백준 / C ] 5522번 : 카드 게임  (0) 2025.07.02
[ 백준 / C ] 9498번 : 시험 성적  (0) 2025.07.02
[ 백준 / C ] 1809번 : Moo  (1) 2025.07.02

+ Recent posts