흠 죄송하지만 함수 질문좀.

min2to의 이미지

#include <stdlib.h>
#include <string.h>
                                                                                
void reverse(char* s);
                                                                                
int main()
{
 char str[100];
                                                                                
 fgets(str,sizeof(str), stdin);
 reverse(str);
 printf("Reversed string : %s",str);
 return 0;
}
                                                                                
 void reverse(char* s)
{
                                                                                
 int ca, i;
 int len=strlen(s);   <-이부분이 정말로 이해가 않되서
                        strlen은 문자열 길이 반환 이라던데
                        여서의 의미를 모르겟어서여 (s)는 포인터에
                        선언된 s를 가르키는건가여?
                                                                                
 for (i=0; i<len/2; i++)
 {
  ca =s[i];
  s[i]=s[len-i-2];
  s[len-i-2] =ca;
 }

저쪽부분이 정말로 이해가 않되서 질문올립니다
책에선 기본상식? 이라 그런지 설명이 않되어있구여
아시는 고수님 도와주십시오.
감사합니다 다가오는 편안한 명절 보내십시오

segfault의 이미지

min2to wrote:
#include <stdlib.h>
#include <string.h>
                                                                                
void reverse(char* s);
                                                                                
int main()
{
 char str[100];
                                                                                
 fgets(str,sizeof(str), stdin);
 reverse(str);
 printf("Reversed string : %s",str);
 return 0;
}
                                                                                
 void reverse(char* s)
{
                                                                                
 int ca, i;
 int len=strlen(s);   <-이부분이 정말로 이해가 않되서
                        strlen은 문자열 길이 반환 이라던데
                        여서의 의미를 모르겟어서여 (s)는 포인터에
                        선언된 s를 가르키는건가여?
                                                                                
 for (i=0; i<len/2; i++)
 {
  ca =s[i];
  s[i]=s[len-i-2];
  s[len-i-2] =ca;
 }

저쪽부분이 정말로 이해가 않되서 질문올립니다
책에선 기본상식? 이라 그런지 설명이 않되어있구여
아시는 고수님 도와주십시오.
감사합니다 다가오는 편안한 명절 보내십시오

char * 자료형은 문자열을 나타내는 자료형으로도 쓰입니다.
정확히 말하면, 문자열의 첫번째 글자를 기리키는 포인터죠.

strlen(s)는 문자열 s의 길이를 반환하는 함수입니다.

익명 사용자의 이미지

아시다시피, char형은 문자 하나를 담기에 충분한 크기의 정수형인 데이터형을 뜻합니다.

C에서의 문자열이란 개념은 맨 끝 문자가 nul(ASCII 코드로 0) 문자인 char형 배열입니다. 문자열을 char 데이터의 연속으로 취급하며, 문자열의 끝을 nul 문자로 표시하는 것입니다. 이것은 직관적으로 이해 가능하실 것입니다.

"str"이란 문자열은 메모리상에서는 다음과 같은 식으로 저장됩니다.

's' 't' 'r' '\0'

함수의 매개변수로 문자열을 넘겨받을 때는 문자열이 저장된 메모리 공간의 첫번째 주소값만 넘겨받으면 됩니다.

int strlen(const char *s);

문자열 전체를 읽고싶다면, s가 가리키는 공간에서부터 널 문자를 만날 때까지 계속 읽으면 됩니다.

그럼 질문하신 코드를 보겠습니다.

void reverse(char* s)
{
                                                                               
 int ca, i;
 int len=strlen(s);

reverse란 함수는 char*형 포인터 주소값을 s란 이름으로 받습니다. s는 아마도 어떤 문자열의 첫번째 주소를 가리키고 있을 것입니다. strlen(s) 이란 코드는 s의 주소값을 그대로 strlen이란 함수로 넘겨주게 되고, strlen에서는 s가 가리키는 메모리 공간에 있는 문자열을 읽어들여 그 길이(널문자를 뺀 길이)를 리턴값으로 반환합니다.

min2to의 이미지

감사드립니다 정말 감사드립니다 복받으실꺼예여

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

댓글 달기

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