durams
@durams
レビュー投稿数
-
平均評価
-
안녕하세요!
投稿
Q&A
; 세미콜론을 붙이는 기준에 문의
안녕하세요? 질문&답변 도우미 durams입니다.처음 공부하실 때 많이 헷갈리실 수 있는 부분입니다. 공부하시다 보면 익숙해지실 테지만, 대표적인 규칙 몇 가지를 짚어드릴게요.컴파일러는 문장(statement)를 하나씩 실행 단위로 인식합니다. 각 statement는 세미콜론(;)으로 끝나야 합니다.변수와 함수의 선언에는 세미콜론을 붙여야 합니다. // 변수의 선언 int a; // 함수의 선언 int DoSomething();구조체(struct)나 열거형(enum)의 정의가 끝나는 중괄호(}) 뒤에는 세미콜론을 붙여야 합니다. 정의와 동시에 해당 타입의 변수를 선언하는 문법이 가능하기 때문입니다. struct Temp { int a; int b; };함수 호출 시에는 세미콜론을 붙여야 합니다.DoSomething();함수의 정의가 끝나는 중괄호(}) 뒤에는 세미콜론을 붙이지 않아도 됩니다. 중괄호를 닫는 것 자체가 끝을 의미하기 때문입니다. int DoSomething() { return 1; }참고로 void say_hello();는 함수를 호출하는 것이 아닌 선언에 해당합니다.
- 1
- 1
- 15
Q&A
Step over 기능 문의
안녕하세요? 질문&답변 도우미 durams입니다.Step Over는 현재 line에 함수 호출이 있을 때, 해당 함수 내부로 들어가지 않고, 현재 줄을 모두 완료시키며 다음 줄로 넘어갑니다.Step Into는 호출하는 함수 내부로 들어가게됩니다. 보다 정확히는 해당 함수에 대한 구현이 열람 가능한 상태일 때 들어갈 수 있습니다. 강의에서 소개된 printf 예시처럼 구현이 제공되지 않고 빌드된 라이브러리 파일(lib 또는 dll)만 주어지는 경우, step into는 수행되지 않고 step over와 동일하게 동작됩니다.디버거에서 프로그램을 천천히 실행한다는 큰 틀에서 얼마나 세부적인 수준까지 들어가서 볼 것인지가 차이라고 보시면 될 것 같습니다. Step Into를 여러번해서 함수 안으로 들어갔다가 return까지 하고 나오면 Step Over를 한 번 한 것과 같습니다.
- 1
- 2
- 18
Q&A
2.6 강의 따옴표 출력 규칙 문의
안녕하세요? 질문&답변 도우미 durams입니다.규칙이기에 그냥 받아들여야 하는 부분일까요? - 네 맞습니다.다만 왜 형태상으로 "\" 내용 "\"이 맞다고 생각하셨을까요? 혹시 escape 기호가 괄호처럼 시작과 끝이 짝지어진 형태라고 이해하신 상태라면, 이번 2.6 강의의 7분 즈음부터 다시 확인해보시기 바랍니다. 한 번 보시고 그래도 의문이 남는다면 다시 질문주세요.
- 1
- 2
- 38
Q&A
int main 함수 관련 오류 문의
안녕하세요? 질문&답변 도우미 durams입니다.프로그래밍 언어에서 main 는 entry point (진입점)으로 사용되는 함수의 기본 이름으로 자주 사용됩니다. 이러한 entry point는 빌드 대상이 되는 프로젝트 당 하나만 존재해야 한다는 규칙이 있습니다. 프로그램이 어디서부터 시작해야할 지 알려주는 이정표 역할을 하기 때문입니다.강의 진행에 따라 여러 예제를 작성하시면서 이전의 파일을 유지하고 싶으시다면, Solution Explorer에서 한 솔루션 내에 여러 프로젝트를 생성하신 후, 실행 시에는 실행하고자 하는 프로젝트를 우클릭해서 Set as Startup Project(시작 프로젝트로 설정)를 클릭해주시면 해당 프로젝트로 실행이 가능합니다.
- 1
- 2
- 36
Q&A
13.4 words[0]
안녕하세요? 질문&답변 도우미 durams입니다.본 영상의 3:48~ 에서 해당 부분에 대한 설명이 나옵니다. 확인하시고 추가로 궁금한 점이 있으시다면 질문 주세요.
- 0
- 2
- 40
Q&A
cstr직접구현
안녕하세요? 질문&답변 도우미 durams입니다.StrCpy_s복사 이후 destination 문자열의 끝에 널 문자를 추가하는 코드가 누락되어 있습니다.StrCat_s이곳에도 concat 이후 destination의 끝에 널 문자를 추가하는 코드가 없습니다. StrCmpC 표준 라이브러리의 strcmp는 두 문자열을 사전순(lexicographical)으로 비교해서 첫 번째 문자열이 사전순으로 앞에 위치하는 경우 음수를, 두 번째 문자열이 사전순으로 앞에 위치하는 경우 양수를, 그리고 동일하면 0을 반환합니다. 강의에서의 설명인 '같으면 0, 다르면 -1'은 어느정도 간소화된 설명이라고 볼 수 있습니다.그런데 질문자님의 코드는 강의에서 설명하는 것과 실제 C 라이브러리 둘 모두와 다른 것으로 보입니다. 어떤 조건이 있을 때 어떻게 반환해야 할 지 한 번 정리해보시는 것을 추천드립니다.코드만 제시하시고 별다른 말씀이 없으셔서 정확히 어떤 피드백을 요구하시는지 답변해드리기 어려운 느낌이 있습니다. 제가 모두 다 알려드리기에는 질문자님이 수동적으로 공부를 하실 것이 염려되기 때문에, 강의 자체에 대해 어느정도 이해가 되었다고 판단이 되시면 스스로 고민하고 디버깅해보는 시간을 갖는 것이 무척이나 도움이 될 것이라고 확신합니다. 이와 별개로 강의 내용 중 잘 이해가 가지 않는 부분이나 궁금한 내용 등에 대한 질문은 언제나 환영입니다. 또한, 코드를 첨부하시는 경우 이미지보다는 코드 블록 기능을 활용하시면 더 시인성 좋은 글쓰기가 가능하니 다음에 활용해보세요.
- 0
- 3
- 49
Q&A
11.7 함수를 구현해 봤습니다.
안녕하세요? 질문&답변 도우미 durams입니다.min_index는 바깥 for 루프에서 0으로 초기화해주고 있는데요, min_index는 안쪽 for 루프에서 매번 초기화되어야합니다. 반례로 {1, 5, 10}와 같은 경우가 있습니다.여러 질문을 연속적으로 달아주셨는데요, 질문 본문에 어떤 것이 궁금하신지에 대해 따로 말씀이 없으시면 질문자님의 의중을 파악하기 어려우니 궁금하신 주제, 또는 강의 중 이해가 가지 않았던 내용 등을 상세히 작성해주신다면 더 풍부한 답변을 제공해드릴 수 있습니다. 또한 작성하신 코드에 대해 테스트와 디버깅을 생활화하시는 것도 추천드립니다.
- 1
- 2
- 34
Q&A
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
안녕하세요? 질문&답변 도우미 durams입니다.my_strcmp두 문자열의 길이를 먼저 비교하고 길이가 같을 때에만 반복문을 통해 비교하도록 구현하셨는데요, 이는 사실 strcmp의 동작과는 조금 다릅니다. strcmp는 순수하게 사전순(Lexicographical)으로 비교를 하기 때문에, 길이가 다르다고 해서 바로 결정이 나지는 않습니다. 한 글자씩 비교하다가 한 쪽에 널 문자가 등장하는 경우 널 문자는 값이 0이기 때문에 자동으로 사전순으로 맨 앞에 위치하는 것이 되는 식으로 비교가 이루어지죠. 물론 널 문자를 만나면 종료도 이루어져야 합니다.또한 반환값을 결정하는 로직이 혼재되어있는 것 같습니다. C 표준 함수 strcmp는 첫 번째 문자열이 사전순으로 빠르다면 음수(-1)을, 두 번째 문자열이 사전순으로 빠르다면 양수(1)을 반환합니다. 하지만 반복문을 통해 비교하는 부분에서는 그와 반대로 반환하는 것으로 보입니다.my_strncmp인자로 전달받은 문자열을 복사한 다음 길이를 맞추고 비교를 하는 것을 보이는데요, 여기도 오류가 있습니다. sizeof() 연산자가 받는 str1과 str2는 배열이 아닌 포인터이기 때문에, 문자열의 길이와 관계없이 x86으로 빌드했다면 4, x64로 빌드했다면 8을 반환하게 됩니다. 실제 문자열의 길이를 얻고 싶다면 strlen을 사용하거나 다른 방법을 사용하셔야 합니다.또한 복사나 fit_str을 하는 전처리를 할 필요없이 바로 비교를 할 수도 있습니다. 물론 str1과 str2가 loc보다 작은 경우를 판별하는 등의 예외 처리는 필요합니다.
- 1
- 2
- 33
Q&A
11.6 my_strcat과 my_strncat을 구현해봤습니다.
안녕하세요? 질문&답변 도우미 durams입니다.잘 작성해주셨네요. 다만 잠재적으로 위험한 부분이 두 가지 있습니다.완성된 문자열의 끝에 널 문자를 붙여주는 코드가 없기 때문에, 이 문자열을 다른 C스타일 문자열 처리 함수에 인자로 전달한다면 널 문자를 찾지 못해 예상한 대로 동작하지 않을 수 있습니다.아직 동적 메모리 할당과 관련 내용에 대해 배우지 않으셨으니 짧게만 어떤 문제점이 있을 수 있는지 알려드릴게요.현재 코드에서는 str1의 시작 주소와 str1의 길이를 활용하여 str1이 끝나는 위치부터 str2를 붙이고 있습니다. 하지만 이런 동작이 안전하게 수행되려면 str1이 끝나는 위치 이후 삽입될 문자열의 크기만큼 여유 공간이 있어야 하겠죠. (my_strcat의 경우 strlen(str2) 만큼, my_strncat의 경우 loc 만큼) 하지만 현재 코드에서는 그런 동작을 보장하지 않습니다.직접 문자열을 전달해서 테스트해보셔도 좋구요, 일단은 그렇구나 하고 넘어가시고 동적 메모리 할당 관련 내용을 배우고 난 후 다시 구현해보셔도 좋습니다.다른 방법으로는 '해당 배열에 대해 허용된 크기'를 함수에 전달하여 처리하셔도 됩니다.
- 1
- 2
- 35
Q&A
11.6 fit_str함수를 구현해 봤습니다.
안녕하세요? 질문&답변 도우미 durams입니다.이번 강의에서 언급된 주의점인 '메모리 유효성 확인하기'가 수행되지 않고 있습니다. loc이 유효한 인덱스를 가리키는지 확인하는 과정이 없습니다.작성하신 for 문은 혹시 널 문자로 지정한 loc 인덱스 이후의 문자들을 널 문자로 만든다는 의미가 맞을까요? strlen 함수는 널 문자를 기반으로 문자열의 끝과 길이를 판단하기 때문에, loc 이후의 문자를 널 문자로 채운다는 동작은 예상한 대로 동작하지 않습니다. 해당 for 문은 실행되지 않게 됩니다.puts로 출력하는 동작 역시 널 문자 이전까지의 문자만을 출력하기 때문에, loc 이후의 문자가 수정되었는지는 확인할 수 없습니다.
- 1
- 2
- 33




