#include <stdio.h>
#include <stdlib.h>
char f(char a)
{
printf("입력 : ",a);
scanf_s("%s", &a);
return a;
}
int main()
{
char *p;
char a=0;
p = (char *)malloc(sizeof(char)*10000);
if(p == NULL)
{
printf("메모리 할당 실 패 !\n");
return 1;
}
*p = f(a);
printf("입력하신 문자열은 ↓\n");
printf("%s", f(a));
free(p);
return 0;
}
소스는 이러합니다.
1. f라는 함수에서 문자열 받음 (main에서 동적할당으로 길이제한 1만바이트까지)
2. f에서 입력받은거를 main printf("입력하신 문자열은 ↓\n");
printf("%s", f(a)); <-여기서 f에서 입력한게 출력이 되야되는데 null값이 나옵니다...
오류가 무엇인지 잘못된 코드가 어떤건지 좀 잡아주세요
댓글 안달려다가 아무도 안다는것 같아서 몇자 적어... C/C++에선 문자열은 일반 상수와는 다르게 취급되.... 우선 함수호출할 때 call by value/adress/alias가 뭐가 다른지랑, 포인터 사용, 그리고 scanf()함수가 가진 버그가 뭐 있는지 좀 살펴보면 되겠다....
strcpy같은거 쓰려면 헤더도 추가해야될거야;;;
보이는게 두개있는데 첫번째는 f함수 반환값이 char형임 char*형이아니라 그래서 *p안에 char한글자만 들어가있음 근데 이건 사용이 안돼서 상관이 없음 두번째는 f의 인자가 char형임 포인터가 아니기때문에 call by value 로 복사가됌 곧 f안에서 a는 지역변수임 그래서 a에 입력을 받아봤자 main함수에 들어왔을때 a에는 초기값 0이 들어와있는 상태로 변화가없음 물론 f안에서도 a의 초기값 0이 복사되어 a가 0을 갖기는 하는데.. 음.. 결론은 손볼게 너무많음 *p에 동적할당하고 반환값 받아왔는데도 다시 printf 안에서 f(a)를 쓰고있으니..그게 큰 문제가 안될지라도 *p를 선언한 이유가 없어짐
값 호출 참조호출 같은거 알면 왜그런지 알 수 있는 건데 C언어 처음배우는사람 입장에선 힘든 내용인것 같고..
일단 포인터쓰면 답이 나올꺼임 인자도 포인터로 그리고 반환도 포인터로 본래 지역변수를 리턴하면 치명적인 에러가 나오게 되어있음
함수 f가 뭔가 이상함
call by reference를 들어봤다면 무슨 문제인지 알 수 있을텐데 찾아보셈