편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2022.12.29

    c언어 간단한 문제 질문 儆儆儆儆儆


    전역후 복학을 준비하고 있는 대학생입니다. 복학을 준비하면서 c언어 문제를 몇개 풀어보고 있는데 문제를 풀다가 막히는 문제가 생겨 질문을 하게 되었습니다.

    • 다음과 같이 총 3개의 배열을 선언한다. char str1[20]; char str2[20]; char str3[40];

    그리고는 str1과 str2를 통해서 프로그램 사용자로부터 문자열을 입력 받되, fgets 함수호출을 통해서 입력 받는다. 이어서 str1에 저장된 문자열을 str3에 복사하고, str2에 저장된 문자열을 str3에 저장된 문자열의 뒤에 덧붙이자. 그리고 마지막으로 str3에 저장된 문자열을 출력하자.

    예를 들어서 str1과 str2에 저장된 문자열이 각각 다음과 같다면, str1 "simple" str2 "string"

    str3에는 문자열 "simplestring"이 저장되어야 한다.

    이런 문제를 풀면서 저는

    #include <stdio.h>
    
    int main(void)
    {
        char str1[20];
        char str2[20];
        char str3[40];
    
        fputs("문자열 입력1: ", stdout);
        fgets(str1, sizeof(str1), stdin);
        fputs("문자열 입력2: ", stdout);
        fgets(str2, sizeof(str2), stdin);
        str1[strlen(str1) - 1] = 0;
        str2[strlen(str2) - 1] = 0;
        for (int i = 0; i < strlen(str1); i++)
            str3[i] = str1[i];
        for (int i = 0; i < strlen(str2); i++)
            str3[strlen(str1)+i] = str2[i];
        printf("%s\n", str2);
        printf("조합의 결과: %s", str3);
        return 0;
    }
    

    이렇게 풀었더니

    조합의 결과 : simplestring儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆string
    
    

    이렇게 나왔습니다.

    뒤에 이 儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆string 이상한건 왜 붙은건가요? str3의 여백부분이 저렇게 나오는건지, 맨뒤에 string은 왜 또 붙는건지 궁금합니다. strncpy함수를 안쓰고 저런식으로 하면 이렇게 나오는건가요?

  • 프로필 이승현님의 편집
    날짜2022.12.28

    c언어 간단한 문제 질문


    전역후 복학을 준비하고 있는 대학생입니다. 복학을 준비하면서 c언어 문제를 몇개 풀어보고 있는데 문제를 풀다가 막히는 문제가 생겨 질문을 하게 되었습니다.

    • 다음과 같이 총 3개의 배열을 선언한다. char str1[20]; char str2[20]; char str3[40];

    그리고는 str1과 str2를 통해서 프로그램 사용자로부터 문자열을 입력 받되, fgets 함수호출을 통해서 입력 받는다. 이어서 str1에 저장된 문자열을 str3에 복사하고, str2에 저장된 문자열을 str3에 저장된 문자열의 뒤에 덧붙이자. 그리고 마지막으로 str3에 저장된 문자열을 출력하자.

    예를 들어서 str1과 str2에 저장된 문자열이 각각 다음과 같다면, str1 "simple" str2 "string"

    str3에는 문자열 "simplestring"이 저장되어야 한다.

    이런 문제를 풀면서 저는

    #include <stdio.h>
    
    int main(void)
    {
        char str1[20];
        char str2[20];
        char str3[40];
    
        fputs("문자열 입력1: ", stdout);
        fgets(str1, sizeof(str1), stdin);
        fputs("문자열 입력2: ", stdout);
        fgets(str2, sizeof(str2), stdin);
        str1[strlen(str1) - 1] = 0;
        str2[strlen(str2) - 1] = 0;
        for (int i = 0; i < strlen(str1); i++)
            str3[i] = str1[i];
        for (int i = 0; i < strlen(str2); i++)
            str3[strlen(str1)+i] = str2[i];
        printf("%s\n", str2);
        printf("조합의 결과: %s", str3);
        return 0;
    }
    

    이렇게 풀었더니

    조합의 결과 : simplestring儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆string
    
    

    이렇게 나왔습니다. 뒤에 이 儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆string 이상한건 왜 붙은건가요? str3의 여백부분이 저렇게 나오는건지, 맨뒤에 string은 왜 또 붙는건지 궁금합니다,, strncpy함수를 안쓰고 저런식으로 하면 이렇게 나오는건가요?