[완료] C++에서 strcpy 함수에 관한 질문

bluekyu의 이미지

안녕하세요. 요즘 C++을 열혈강의 책으로 공부하고 있는데, 이상한 오류가 발생하고 있어서 질문을 올립니다.

열혈강의 C++ 책에서 OOP 프로젝트라고 있는데, 그 프로젝트에서 1단계 코드를 그대로 타이핑 해서 컴파일을 했는데, 오류가 발생했습니다.

오류 내용은 아래와 같습니다.

./file.cpp: In function ‘void MakeAccount()’:
./file.cpp:80: error: ‘strcpy’ was not declared in this scope

그리고 80번째 줄 코드가

strcpy(pArray[index].name, name);

입니다.

현재 만 포함시킨 상태입니다. 그래서 strcpy를 레퍼런스에서 찾아보니까 cstring.h 에 포함이 되어 있더군요. 그래서 cstring을 포함시켜서 컴파일 해보니, 책에 있는 변수명이 cstring에 있는 함수와 겹치면서 에러를 내더군요. 그래서 변수명을 고쳐서 컴파일 하니까 제대로 되었습니다.

이렇게 에러는 해결했는데, 책에 있는 코드가 실행이 안 된다는게 이상하네요. 단순히 cstring.h 포함을 빼먹은 것은 아닌것 같고, 이러한 질문도 인터넷에 없는 것 같습니다.

혹시, 윈도우즈에서는 strcpy를 iostream만 가지고도 컴파일이 되나요? 아니면 제가 무슨 실수라도 한 것일까요?

shint의 이미지

http://www.cworldlab.com/CandCplus/clibrary/strcpy.htm

#include string.h
char *strcpy(char *dest, const char *src);

strcpy는 string.h 헤더를 사용하네요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

klara의 이미지

cstring.h라는 해더는 없습니다.
string.h또는 cstring입니다.
string.h에는 전역으로 strcpy가 선언되어있고,
cstring에는 표준 네임스페이스안에 std::strcpy로 선언되어있습니다.
그리고 일반론을 말하자면, 책이 잘못된 경우도 있습니다.

bluekyu의 이미지

답글 모두 감사합니다.

cstring을 포함시켜서 해결은 했습니다. 그런데 다른 곳에서 물어도 봤는데, 윈도우즈에서는 이 헤더를 포함하지 않고도 iostream 헤더만을 가지고 strcpy를 사용할 수 있다고 하였습니다.

윈도우즈 iostream과 리눅스 것과 함수들이 다르게 정의되어 있나요?

/*** Signature ******************
* blog: http://blog.bluekyu.me/ *
********************************/

klara의 이미지

해더포함에 대한 것은, 리눅스/윈도우의 차이뿐만 아니라, 리눅스끼리도 배포판이나 버전에 따라서 다를수 있습니다.

shint의 이미지

#include iostream
strcpy(&x[0], &x[0]);

vs2005에서 테스트해봤는데. #include iostream 헤더를 사용하니 컴파일 됩니다.

참고로 strcpy 정의부로 이동해보니 string.h 헤더를 사용하고 있었습니다.
__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1(char *, __RETURN_POLICY_DST, __EMPTY_DECLSPEC, strcpy, __out_z char, _Dest, __in_z const char *, _Source)

cpp overload standard function 으로 정의된게 연관되었지 않나 생각됩니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.