C언어~앞뒤바꿔도 똑같은 문자 찾기 질문요ㅠㅠ
재마루
질문 제목 : C언어~앞뒤바꿔도 똑같은 문자 찾기 질문요ㅠㅠ질문 요약 :문자열 길이 계산 함수에서 왜 자꾸 값이 33이 반환되는지 모르겠어요;질문 내용 :
다 안보셔두 되구요~ munl함수에서 자꾸 33이 반환되는지 모르겠어요ㅠㅠ꼭좀 도와주세요 5시간째 삽질중이에용
#includestdio.h
int munl(int *pm); // 문자열 길이를 계산하는 함수;
int main(void)
{
char mun[100]; //문자열 받는 배열
char *p=mun; // 포인트로배열 주소 할당
int lo, i, c=0;
printf(입력 ㄱㄱ \n);
scanf(%s, mun);
lo=munl(mun); // ------ 이부분이 문제에염;;lo값에 문자열 길이를 받으려고 하는데 얼토당토않은 33값이 계속 나오네요;
printf(%d \n, lo);
if(lo%2==0)
{
for(i=0; i((lo/2)-1); i++)
if(p[i]==p[lo-i-2])
c++;
}
else
{
for(i=0; i(lo/2); i++)
if(p[i]==p[lo-i-2])
c++;
}
if(c==i)
printf(회문임!!\n);
else
printf(회문아님!!\n);
return 0;
}
int munl(int *pm) // 문제의 함수!!!
{
int i;
for(i=0; i100; i++)
{
if(pm[i]==0)
break;
}
return i;
}
-
잠팅이
멀티 바이트 체계에서는 1, 2바이트 문자 단위로 사용되기 때문입니다.
int형 포인터로 인자를 받게 되면, 비교 또한 4바이트 단위로 끊어지게 때문에
제대로 된 비교가 불가능합니다.
\가나다라a.\ (10바이트, NULL까지 11바이트)
이 경우, int형 포인터로 4바이트 씩 끊게 되면, 한번 인덱스를 비교해보겠습니다.
0 - 4 - 8 - 12
NULL 데이터의 인덱스는 10입니다.
그런데, 비교하기 위해 도달할 수가 없습니다.
왜나햐면, in -
미영
지덕수다님~감사해요+_+ 매개변수가 int형이라 그런거군요ㅠㅠ;근데 왜 int형일때는 33이 반환되는지아세요?알려주세요ㅠㅠ
-
자올
int munl(char *pm) // 문제의 함수!!!
{
int i;
for(i=0; *(pm+i); i++);
return i;
} -
김슬픔
수다님~ㅋ감사해요+_+ㅎ 근데 왜 int형일때는 33이 반환되는지아세요?알려주세요ㅠㅠ
-
노을빛
mun은 char 배열인데, munl 함수에서는 int 포인터로 받고 있군요.
-
재마루
문자열 길이를 받으시려면 strlen함수를 쓰시면 간단한데요?
그리고 munl 함수는 널문자를 만나면 리턴하여 문자열 길이를 계산하는 걸로 보이는데..
이 함수도 문제는 없는거 같네요;;