지금 다니는 회사는 따로 코드 면접을 보진 않지만, 혹시 코드 면접을 실시하게 된다면 이런 질문을 해보는게 어떨까 합니다.
다음 조건을 만족하는 C 함수를 만들어 보세요.
TODO: 주어진 문자열 n개를 이어붙인 문자열을 버퍼에 담아 넘긴다.
1. 버퍼는 caller가 준비한다. 2. 문자열 n개는 char *argv[], int argc 형태로 전달된다.
포인터 다루는데 익숙하고 C에서 문자열 구조를 알면 간단하게 풀 수 있는 문제군요. 좋은 문제라고 생각합니다.
조금 첨언하자면, argc, argv는 사람에 따라선 전혀 써볼 일이 없는 경우도 있을 것 같으니, 문제에서 argv의 구조 정도는 알려주는게 좋을 것 같습니다. 아니면 전달 방식을 직접 정의해도 된다고 하는 것도 괜찮겠네요.
char* foo(int argc, char* argv[], char* buffer) { int index = 0; for (int i = 0; i < argc; i++) { for (int j = 0; *(argv[i] + j) != '\0'; j++) { *(buffer + index) = *(argv[i] + j); index++; } } *(buffer + index) = '\0'; return buffer; }
아마도.. 이러면 될려나요?
/* How to Love Others */ while(GetDepth(Love) < Enough) DoLove();
size_t join(char * buffer, int argc, const char * argv[]) { int i; const char *from; char *to = buffer; for ( i = 0; i < argc; ++i ) { from = argv[i]; while ( *from ) *to++ = *from++; } *to = '\0'; return to - buffer; }
온라인 상에서 바로 짠거라 에러나 버그 유무는 모르겠습니다...
앗차 선언부에 const char * argv[] 는 이렇게 하면 안되겠군요. char * argv[]로 고쳐서 읽어주세요.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
포인터 다루는데 익숙하고 C에서 문자열 구조를 알면
포인터 다루는데 익숙하고 C에서 문자열 구조를 알면 간단하게 풀 수 있는 문제군요. 좋은 문제라고 생각합니다.
조금 첨언하자면, argc, argv는 사람에 따라선 전혀 써볼 일이 없는 경우도 있을 것 같으니, 문제에서 argv의 구조 정도는 알려주는게 좋을 것 같습니다. 아니면 전달 방식을 직접 정의해도 된다고 하는 것도 괜찮겠네요.
인자가 3개가 되는건가요?
아마도.. 이러면 될려나요?
/* How to Love Others */
while(GetDepth(Love) < Enough) DoLove();
size_t join(char * buffer,
온라인 상에서 바로 짠거라 에러나 버그 유무는 모르겠습니다...
앗차 선언부에 const char * argv[] 는
앗차 선언부에 const char * argv[] 는 이렇게 하면 안되겠군요.
char * argv[]로 고쳐서 읽어주세요.
댓글 달기