배열 문자뒤집기에서 이해가 잘 안됩니다만

배열 문자뒤집기에서 이해가 잘 안됩니다만

작성일 2008.03.02댓글 2건
    게시물 수정 , 삭제는 로그인 필요

#include<stdio.h>

int main(void)
{
  char string[100];
  int len=0, i;

  printf("문자열 입력");
  scanf("%s",string);

  while(string[len]!='\0')
   len++;

  for(i=0;i<len/2;i++)
  {
    char temp=string[i];
 string[i]=string[len-i-1];
 string[len-i-1]=temp;

  
  }
  printf("변경된 문자열:%s \n", string);
  return 0;

}

 

 

char temp=string[i];
 string[i]=string[len-i-1];
 string[len-i-1]=temp;

여기서 입력한 문자열이 abcdefgh라면 string[8]입니까 string[9]가 되는 겁니까?

 

, abcdefgh면은 0부터7까지문자열이 저장되고 나머지 8에는 널이 저장되는거 맞습

 

니까? 8이면 9개 저장 공간이 할당되는거니까..

 

근데 딴페이지는 char str[6]="hello";가 되는데 왜 여기서 5개면 6개 저장공간이 할

 

당되니까. 충분한데 뭣하러 공간을 7개나 만드나요?

 

제가 잘못이해 했는지 지적바랍니다.  



profile_image 익명 작성일 -

char str[6]; 라는 구문이 문자열에 7개 공간이 할당되는게 아닙니다.

char str[6]; 에서 6은 할당되는 메모리 (char형이므로 1바이트) 의 크기를 나타내고,

실제로 계산시에는 제로베이스를 사용합니다. 즉, 0부터 5까지 사용이되는 거죠.

예를 들어 char str[6] = "hello"; 라는 구문은

str[0]  = 'h', str[1] = 'e', str[2] = 'l', str[3] = 'l', str[4] = 'o', str[5] = '\0'

라는 식으로 해석될 수가 있습니다.

이런식으로  abcdefgh라는 문자열 역시 선언시에는 char str[9]; 로 선언을 해야 할 것입니다.

 

파워빌더나 데이터베이스 프로그래밍 같은 경우는 제로 베이스가 아닌 1부터 시작하는 경우가 있으나,

기본적으로 제로 베이스가 사용이 돼니 이러한 연산에 익숙해질 필요가 있을 것입니다.

 

 

profile_image 익명 작성일 -

아  선언시와 함수 중간에 배열을 개수는 시작점이 다릅니다.

 

선언시string[100] 이란 말은 1~100까지 들어간다는 말입니다.

하지만 함수 중간에 stirng[i]는 0~99개가 됩니다.

 

한마디로 선언시 stirng[1]에 있던거는 sting[0]에 들어간다고 보시면 됩니다.

다른것입니다. 선언시[]에 들어가는거는 배열의 길이이고

함수 중간에 []에 들어가는거는 위치를 뜻하는 겁니다.

 

abcdefgh이면 총길이는 7개에 널문자포함  선언시에는 string[8]이 되겠지만

string[0]=a

stirng[1]=b

stirng[2]=c

stirng[3]=d

stirng[4]=e

stirng[5]=f

stirng[6]=g

stirng[7]=h

stirng[8]=NULL

 

이렇게 저장되는겁니다....

다시말해 선언시 []는 길이  함수에서 []는 위치  즉 다르다는 겁니다.

 

 

char str[6]="hello";에서 6개 저장공간이라고 하면 단어의 길이가 6이라는 뜻이죠

h-1 e-2 l-3 l-4 o-5 NULL-6  6개입니다.. 길이가 6개라는 말이죠!!

그렴 어떻게 저장되냐하면

 

str[0]=h

str[1]=e

str[2]=l

str[3]=l

str[4]=o

str[5]=NULL

 

(7개가 아닙니다.!)

 

이렇게  개수는 총 6개지만  위치는 0부터 시작했기 때문 5에서 끝나는 겁니다.

그래서  str[6]이라는 공간에는 컴터에 없는 공간입니다.

 

 

다시말해!! 선언시 str[6]와 함수 중간에 str[6]는 다른 의미입니다.

선언시는 총 길이  함수 중간에는 위치!!!

 

 

다르다고 이해 하시면 됩니다.!!!

 

저도 이해 하는데 좀 걸리긴 했지만^^

열공하세요^^

C + + 문자 뒤집기

... 함수를 몰라서요 ^^; 부탁드리겠습니다... 앞문자를 찾아서요 // 그다음에 뒤집기 swap 을 합니다 // 꼭 배열을 써야합니다. } 이해...

java 문자 숫자열 배열 관련...

... 문자 배열을 선언한 이유..?? 9. StringBuilder sb = new... 제가 이해 못해서 하나하나 이해를 해야... 기존의 문자열을 변경 시키게됩니다. // jdk 1....

[배열]아스키값 가장 큰 문자 출력

... i번째 배열과 i+1번째 배열의 값 비교 { ch=string[i]... 두개의 문자만을 크기 비교를 하고 있어서 최대값이 제대로 출력이안됩니다. 이해가 잘 안가는...

사전식 배열인 뭔가요...,,,

... 그냥 이해가 안가요 어케 설명좀 해주세요 ㅠㅠ 사전식 배열은 천천히 하셔야 됩니다. 내신은 학교마다... abcde를 사전식 배열한다고 치면 총 5개의 문자가 올 수 있으니...

단어 뒤집기인데요..

단어 뒤집기 함수인데요. 예를 들면, 'Do or not do... 수행됩니다. 홀수일 때 정가운데문자는 치환할필요 없죠. 이해 되시면 쪽지주세요 #include...

C언어 배열 문자 뒤집기

... 문자를 뒤로 } printf("The reversed word: %s\n", voca); return 0; } 영단어 뒤집기 부분에서 이해가 잘 안... g가 단어의 끝이란걸 알려줘야 됩니다. 어째서...

포인터와 배열 [상수 / 변수]

... 이해가 안되네요.. 9 번째 10 번째 라인이 이해가 되질... 이렇게 하면 모두 정상이고 실행도 됩니다. 분명... NUL 문자배열 a에 각각의 칸에 저장이 됩니다. 물론...

질문인데요.. 배열과 for문에 대해서...

... for문이 이해가 잘 안가서요.. 워낙 초보인지라;; 그럼 답변 부탁드립니다 1차원배열은 만약 a[10]이라면... 그것이 5개 있다고 생각하심됩니다. 메모리상에서...