2014-12-03 4 views
-1
#include<stdio.h> 
struct st 
{ 
    char *name; 
    char *br; 
}; 
int main() 
{ 
    struct st ob[2]; 
    ob[0].name=NULL; 
    ob[0].br=NULL; 
    ob[1].name=NULL; 
    ob[1].br=NULL; 
    printf("Enter name:"); 
    scanf("%s",ob[0].name); 
    printf("enter branch:"); 
    scanf("%s",ob[0].br); 
} 

이 프로그램을 실행하면 이름을 입력 한 후 프로그램이 실행을 멈 춥니 다. 프로그램이 잘 작동하도록 변경 사항을 제안하십시오.구조 프로그래밍 C에서

답변

3
struct st 
{ 
    char *name; 
    char *br; 
}; 

검색하기 전에 구조의 포인터에 메모리를 할당해야합니다.

메모리를 할당하려면 malloc()을 사용하십시오.

ob[0].name=malloc(20); 
ob[0].br=malloc(20); 
0

당신은 scanf와 기능에 & opetator을 잊어 버렸습니다.

+0

포인터가 입력 한 문자열의 주소를 유지할 때 '&'기호가 필요한 이유는 무엇입니까? Pl. 덧글 – Ajax

+0

@Ajax 나는 이것을 대답으로 받아들이지 않지만 왜 &'는 문자열을 여기에서 스캔해야 하는가? 또한이 ans는 메모리를 할당하는 실제 문제를 말하지 않습니다. – Gopi

+0

@Ajax scanf의 인자는 포인터와 비슷하게 작동합니다. 그래서 여러분은 입력을 받고있는 것을 지적해야합니다. Ob [0.] .name은 값을 얻지 만 입력하려고하는 변수의 메모리 위치를 가리 키지 않고 잘못된 메모리 섹션을 덮어 씁니다. 이것이 당신의 질문을 만족 시키길 바랍니다. – Deva

1

@Gopi가 지적했듯이 포인터를위한 메모리를 할당해야합니다. 이 기능은 Malloc() 기능을 사용하여 수행 할 수 있습니다. 의 malloc() 함수 또는은 calloc() 함수를 사용

#include<stdio.h> 
struct st 
{ 
    char *name; 
    char *br; 
}; 
int main() 
{ 
    struct st ob[2]; 
    ob[0].name= malloc(sizeof(char) * SIZE OF STRING); 
    ob[0].br= malloc(sizeof(char) * SIZE OF STRING); 
    ob[1].name= malloc(sizeof(char) * SIZE OF STRING); 
    ob[1].br= malloc(sizeof(char) * SIZE OF STRING); 
    printf("Enter name:"); 
    scanf("%s",ob[0].name); 
    printf("enter branch:"); 
    scanf("%s",ob[0].br); 
}  
+0

malloc()을 캐스팅 할 필요가 없음 – Gopi

+1

[malloc의 결과를 캐스팅해야합니까?] (http://stackoverflow.com/questions/605845/do-i-cast-the-result- of-malloc) –

+0

Deva가 지적한대로 ob [0] .name 앞에 '&'기호를 붙였습니다. 나는 그것이 어떻게 작동하는지 놀랍다. 포인터는 우리가 입력하는 문자열의 주소를 유지 한 다음 여기에 '&'연산자가 필요합니다. – Ajax

3
Before Getting a value from the user you must allocate a memory location for that 

포인터. 할당하지 않으면 세그먼트 화 오류로 오류가 발생합니다.

ob [0] .name = (char *) malloc (sizeof (char) * 문자열 크기);

ob[0].br= (char *) malloc(sizeof(char) * size of string); 

ob[1].name= (char *) malloc(sizeof(char) * size of string); 

ob[1].br= (char *)malloc(sizeof(char) * size of string);