[C강좌] 초보자를 위한 기초 C 언어 강좌 #16 : 문자열 함수

Поделиться
HTML-код
  • Опубликовано: 12 янв 2025

Комментарии • 13

  • @김성민-f8n1m
    @김성민-f8n1m 7 лет назад +1

    제가 실전 경험이 부족한지라...
    문자를 받아들이는 프로그램에 문자열을 입력하면 오버플로우 되는 현상을 해결하기 위해 문자열을 정의하고 2글자 이상이라면 재입력 루프, 1글자라면 그 문자 (\0 제외)를 문자 함수에 저장하는 방법을 구상했습니다. 그런데 문자열에서 n번째 글자 추출, 그 글자를 다시 문자에 저장하는 코드를 어떤 식으로 짜면 될까요? 아니면 오버플로우 현상을 해결할 수 있는 방법(2문자 이상을 입력하면 재입력되도록) 하는 다른 방법이 있을까요?

    • @snowltv
      @snowltv  7 лет назад

      +왜 만든 계정일까 가장 간단히는
      임시로 저장할 큰 문자열 변수를 선언한 후
      거기로 문자열을 입력받고
      길이가 2문자 이상이면 재입력,
      원하는대로 한문자이면 원래 저장하고자 하는 변수에 넣으면 됩니다.

  • @김성민-f8n1m
    @김성민-f8n1m 7 лет назад +1

    문자열이 한글자여도 문자 변수에 안 들어갑니다 ㅠㅠ

    • @snowltv
      @snowltv  7 лет назад

      +왜 만든 계정일까 char a;
      char str[10];
      이렇게 있을때
      문자열 변수 str은 char가 10 개 붙어있는겁니다.
      뒤에 배열에서 설명하겠지만
      맨앞 한문자는 str[0] 입니다.
      a = str[0];
      하면 맨앞 한문자 저장됩니다.

    • @김성민-f8n1m
      @김성민-f8n1m 7 лет назад

      오오오 감사합니다

  • @쏠까말까
    @쏠까말까 7 лет назад

    그런데 strtok의 경우 null로 하면 다른곳에있는 null문자를 읽을수도 있지않나요? Strtok의 경우는 어떤식으로 인식하는지 궁금합니다. 최초로 불러와진 주소부터 인식하는거면 이후 다른걸 초기화할땐 어찌되는지 등이요.

    • @snowltv
      @snowltv  7 лет назад

      다른 변수를 자르고 싶을때는 그 변수 포인터를 넣으면 됩니다.그리고 NULL은 단순히 0이고, 널문자
      과는 다릅니다.

    • @쏠까말까
      @쏠까말까 7 лет назад

      SnowL TV 저는 \0인 널을 말씀드리는 겁니다. ㅎㅎ 여기서 strtok(NULL,” “) 이러한 식으로 되면 다른곳에있는 널문자를 보고 해당 기능을 수행할수도 있지않나 해서요. 아니면 그냥 처음 불러온 주소에서 쭉 읽어내는 방식인건가요? 한단어를 읽고 다시 처음으로 돌아가는게 아니라 다른 포인터를 가르키키 전까지는 계속해서 읽는 방식으로요.

    • @snowltv
      @snowltv  7 лет назад

      위 답글에서 잘못써놨는데
      은 개행문자고 \0가 널문자네요.
      영상에서도 설명한것같지만 strtok()을 한번더 설명하자면
      첫번째 인자로 포인터(주소)를 받게 되면
      그 주소부터 널문자(\0)까지 두번째 인자의 문자열을 찾습니다.
      첫번째 인자로 NULL(0x00)을 받게 되면
      앞서 찾은 주소부터 널문자까지 두번째 인자의 문자열을 찾습니다.
      만약 앞서 strtok()을 사용하지 않았다면 NULL을 리턴하게 됩니다.
      strtok()은 문자열에서 특정 문자열까지를 찾아 자르는 함수입니다.
      문자열은 반드시 널문자로 끝나야 하므로 프로그래밍만 제대로 했다면
      오동작이 일어날 일이 거의 없습니다.

    • @쏠까말까
      @쏠까말까 7 лет назад

      SnowL TV 감사합니다.

  • @김동현-x1y3m
    @김동현-x1y3m 6 лет назад

    char *str[3] = {"hi","hello","안녕하세요"};
    이렇게해보니 VS에서 빨간색으로 밑줄쳐지고
    const char * 형식의 값을 사용하여 char * 형식의 엔티티를 초기화할 수 없습니다 라고떠요..

    • @snowltv
      @snowltv  6 лет назад +1

      VS 2017의 최신 업데이트 버전에서 그와같은 문법이 애러가 나도록 바뀌었습니다.
      원래 그와 같이 문자열을 초기화하면 초기화 이후 안의 값을 수정할 수 없게 되는데, 이게 일반 배열과 혼동을 초래할 수 있는 문제가 있어 명시적으로 상수형으로 선언하도록 바뀐 것으로 보입니다.
      간단하게 const char *str[3] 으로 고치면 해결됩니다.

    • @김동현-x1y3m
      @김동현-x1y3m 6 лет назад

      SnowL TV 감사합니다 덕분에 해결했습니다!