구조체에서 배열 선언하고 실행시키면 되는데 char형 포인터 선언한 다음 malloc으로 메모리 동적할당 하고 실행하면 계속 런타임 오류가 나네요ㅜㅜ 뭐가 잘못된걸까요? 너무 오랜만에 해서 잘모르겠어요ㅠㅠ
#include #include #include struct phonebook_t { char *s; int num;} list; main() { int i; char *search; char test[20]; // for(i=0;i<3;i++) // { list.s=(char *)malloc(30); search=(char *)malloc(20); printf("s의 sizeof=%d\n", sizeof(*list.s)); printf("num의 sizeof=%d\n", sizeof(list.num)); printf("search의 sizeof=%d\n", sizeof(*search)); printf("test의 sizeof=%d\n", sizeof(test));// } for(i=0;i<1;i++) { printf("사람 %d의 이름 및 전화번호를 입력하세요 : ", i+1); scanf("%s %d", &list.s, &list.num); fflush(stdin); } printf("s2의 sizeof=%d\n", sizeof(*list.s)); printf("찾고자 하는 사람의 이름을 입력하세요 : "); scanf("%s", search); fflush(stdin); printf("search=%s\n", search); printf("list의 주소=%u\n", &list.s); printf("list=%s\n", *list.s); // printf("%s\n", list[1].s); // printf("%s\n", list[2].s); for(i=0;i<1;i++) { if(!strcmp(search,list.s)) { printf("찾으신 %s의 전화번호는 %d입니다\n", list.s, list.num); break; } }}
코드는 code ~ /code 태그로 둘러싸주세요. (좌우에 부등호)
// 이렇게 나오게요
1) list.s 가 포인터만 있고 정작 그 포인터가 가리키는 공간이 없음.
2) scanf 에서 %s 에 해당하는 인자는 &list.s 가 아니고 list.s 여야 함
3) 마지막 printf 에서도 *list.s 가 아니라 list.s 여야 함
정도가 보이는군요.
그리고 char * 변수에다가 * 붙이고 sizeof 해봤자 (sizeof(*search) 등) char 타입의 길이인 1밖에 안 나오지, malloc()으로 할당받은 크기가 나오지는 않습니다. 아마 의도가 그건 것 같은데.
좋은 하루 되세요!
되네요!!!! 감사합니다^^
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
코드요
#include
#include
#include
struct phonebook_t
{ char *s; int num;} list;
main()
{ int i;
char *search;
char test[20];
// for(i=0;i<3;i++)
// { list.s=(char *)malloc(30);
search=(char *)malloc(20);
printf("s의 sizeof=%d\n", sizeof(*list.s));
printf("num의 sizeof=%d\n", sizeof(list.num));
printf("search의 sizeof=%d\n", sizeof(*search));
printf("test의 sizeof=%d\n", sizeof(test));// }
for(i=0;i<1;i++)
{ printf("사람 %d의 이름 및 전화번호를 입력하세요 : ", i+1);
scanf("%s %d", &list.s, &list.num);
fflush(stdin); }
printf("s2의 sizeof=%d\n", sizeof(*list.s));
printf("찾고자 하는 사람의 이름을 입력하세요 : ");
scanf("%s", search);
fflush(stdin);
printf("search=%s\n", search);
printf("list의 주소=%u\n", &list.s);
printf("list=%s\n", *list.s);
// printf("%s\n", list[1].s);
// printf("%s\n", list[2].s);
for(i=0;i<1;i++)
{ if(!strcmp(search,list.s))
{ printf("찾으신 %s의 전화번호는 %d입니다\n", list.s, list.num);
break; } }}
코드는 code ~ /code 태그로 둘러싸주세요.
코드는 code ~ /code 태그로 둘러싸주세요. (좌우에 부등호)
1) list.s 가 포인터만 있고 정작 그 포인터가 가리키는 공간이 없음.
2) scanf 에서 %s 에 해당하는 인자는 &list.s 가 아니고 list.s 여야 함
3) 마지막 printf 에서도 *list.s 가 아니라 list.s 여야 함
정도가 보이는군요.
그리고 char * 변수에다가 * 붙이고 sizeof 해봤자 (sizeof(*search) 등) char 타입의 길이인 1밖에 안 나오지,
malloc()으로 할당받은 크기가 나오지는 않습니다. 아마 의도가 그건 것 같은데.
좋은 하루 되세요!
되네요!!!! 감사합니다^^
되네요!!!!
감사합니다^^
댓글 달기