c언어 strcmp함수 사용에 대한 질문

dygks8557의 이미지

함수 내에서 입력받은 문자열과 파일안에 있는 문자열을 fget으로 불러와 구조체 안에 넣은 문자열을

비교하는 함수 strcmp를 했을때에 같은 문자열인데도 불구하고 왜 0이 아닌 다른 실수를 반환하는걸까요..?

*코드가 길어 첨부하지 못한 점 양해 부탁드립니다. 또한, 질문이 이해가 안가신다면 댓글 달아주세요.

감사합니다

익명 사용자의 이미지

당연히 문자열이 틀리니 실수를 반한하겠지요.

질문을 하시면서 질문이 이해 안된다면 댓글을 달아 달라니요... 코드가 몇만 라인 되나요?

dygks8557의 이미지

문자열이 다른데 제가 이렇게 질문을 적어서 드릴까요... ㅎㅎ

익명 사용자의 이미지

(X) 질문자가 말하길 같은 문자열이라는데 왜 strcmp는 다르다고 할까?
(O) strcmp에 의하면 다른 문자열인데 왜 질문자는 같다고 할까?

인터넷에 있는 누군가보다는 strcmp가 더 믿을만합니다. strcmp를 직접 구현하신 게 아니라면요.

상황 파악에 필요한 정보를 다 올려놓은 것도 아니고 궁금하면 직접 물어보라니... 지금 누가 아쉽죠? ㅎㅎ.

dygks8557의 이미지

조언해주신거 감사합니다. 제가 아직 질문하는게 미숙해서 제대로 정보도 전달 안되고 내용이 부족했나보네요.

하지만 저는 정답을 듣기위해 질문을 한게 아니라 방향성을 얻으려고 질문을 올렸던겁니다.

제가 질문한 의도와는 다르게 받아드리신거같아 죄송할 따름이네요!

김정균의 이미지

컴퓨터가 출력하는 건 사 람눈에 보이는게 다가 아니기 때문이겠죠 :)

dygks8557의 이미지

감사합니다! ㅎㅎ

Yi Soo An@Google의 이미지

내용이 정말 같은데 예상한 결과가 아니라면 문자열 인코딩, 뉴라인(\n), 널 문자(\0) 등등 고려해보세요.

---------------
Happy Hacking!

dygks8557의 이미지

의견 감사합니다! 한번 해봐야겠네요 ㅎㅎ

raymundo의 이미지

"같은 문자열인데도"라고 판단은 어떻게 하셨는데요?

printf("[%s]\n", str1);  // 좌우에 [ ] 표식이 중요
printf("[%s]\n", str2);

이렇게 화면에 찍어는 보셨어요? 제 예상에는 fgets로 받은 문자열에 있는 개행문자를 제거하지 않았을 가능성이 매우 높아 보이는군요. 눈에 잘 안 보여서(분명히 빈 줄 하나가 더 생겨남에도) 놓치기 쉽거든요.

이래도 똑같이 보인다면 strlen으로 길이를 찍어보세요. 똑같은 한글인데 인코딩에 따라 바이트 시퀀스가 다를 수 있습니다. 길이도 달라지고.

그래도 똑같다면 각 바이트에 뭐가 들어갔는지를 보세요.

for (i=0; i<strlen(str1); i++) {
   printf("%02X ", str1[i]);
}

암튼 위에 다른 분이 말씀하셨다시피, strcmp 라이브러리에 버그가 있을 확률보다는 질문하신 분이 다른 문자열을 같다고 착각하고 있을 가능성이 훨씬 높습니다.

좋은 하루 되세요!

dygks8557의 이미지

위에 분들이 말씀하신걸 보고 제 질문이 많이 잘못되었구나라는 점을 깨우친거같습니다. 다음에 질문을 할 때엔 해결하려고 어떤부분을 해봤는지까지 추가로 설명해드리고 간단한 코딩정보를 알려드리는게 가장 베스트일거같네요.

많이 부족한 질문이었는데 성심성의껏 대답해주시고 여러방면으로 다가갈 수 있게 해주신거 감사합니다.

확인해보니 개행문자를 제거하지 않아서 생긴 문제더라구요. 정보 감사합니다!

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.