63.8 문자열 매개 변수
, Lee Seok님이 작성compareString 함수에 매개변수로 들어간 s1이 포인터인가요?
그냥 변수 아닌가요? comparing함수에 포인터를 매개변수로 넣는 것이 정답으로 나와서 여쭙습니다.
int main()
{
char *s1 = malloc(sizeof(char) * 10);
strcpy(s1, "Venus");
compareString(s1, "Venus");
free(s1);
return 0;
}
저는 이렇게 매개변수를 포인터가 아니고, char str1, char str2로 해봤는데, 답이 나오던데요...
void compareString(char str1, char str2)
{
int int1 = strcmp(str1, str2);
if (int1 == 0)
printf("equal\n");
else
printf("not equal\n");
}
Re: 63.8 문자열 매개 변수
, 도장_ 관리자님이 작성문의한 코드는 실행 오류가 발생합니다.
https://glot.io/snippets/faaj2470pw
Run 버튼을 클릭해서 확인하세요.
char는 문자 하나이고, char*은 문자열입니다.
Visual Studio에서는 다음과 같은 경고 메시지가 발생합니다.
'함수': 'char'의 간접 참조 수준이 'char *'과(와) 다릅니다.
warning C4024: 'compareString': 형식 및 실제 매개 변수 1의 형식이 서로 다릅니다.
컴파일은 되지만, 실행하면 결과는 출력되지 않습니다.
컴파일러 구현체에 동작할 수도 있지만, 이는 잘못된 동작입니다.
문자 1개를 써야 할 곳에 문자 2개 이상의 문자열을 쓰는 동작은 메모리 할당 범위를 초과해서 쓰는 것이므로 결국 액세스 위반입니다. 이는 프로그램 중단, 보안 문제 등을 일으킵니다.