질문 제목 : 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;
}
윤비 2026.07.01
멀티 바이트 체계에서는 1, 2바이트 문자 단위로 사용되기 때문입니다.
int형 포인터로 인자를 받게 되면, 비교 또한 4바이트 단위로 끊어지게 때문에
제대로 된 비교가 불가능합니다.
\가나다라a.\ (10바이트, NULL까지 11바이트)
이 경우, int형 포인터로 4바이트 씩 끊게 되면, 한번 인덱스를 비교해보겠습니다.
0 - 4 - 8 - 12
NULL 데이터의 인덱스는 10입니다.
그런데, 비교하기 위해 도달할 수가 없습니다.
왜나햐면, in
나려 2026.07.01
지덕수다님~감사해요+_+ 매개변수가 int형이라 그런거군요ㅠㅠ;근데 왜 int형일때는 33이 반환되는지아세요?알려주세요ㅠㅠ
연블랙 2026.07.01
int munl(char *pm) // 문제의 함수!!!
{
int i;
for(i=0; *(pm+i); i++);
return i;
}
친화력 2026.07.01
수다님~ㅋ감사해요+_+ㅎ 근데 왜 int형일때는 33이 반환되는지아세요?알려주세요ㅠㅠ
옆집꼬마야 2026.07.01
mun은 char 배열인데, munl 함수에서는 int 포인터로 받고 있군요.
베레기 2026.07.01
문자열 길이를 받으시려면 strlen함수를 쓰시면 간단한데요?
그리고 munl 함수는 널문자를 만나면 리턴하여 문자열 길이를 계산하는 걸로 보이는데..
이 함수도 문제는 없는거 같네요;;