2014-12-03 66 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函数中的操作符。

+0

当指针保留我们输入的字符串地址时,这里需要'&'符号。 PL。评论 – Ajax 2014-12-03 05:25:57

+0

@Ajax我不介意接受这个答案,但为什么甚至'&'需要在这里扫描一个字符串。而且这个答案也没有提到正在分配内存的实际问题。 – Gopi 2014-12-03 05:53:24

+0

@Ajax scanf的参数像一个指针一样工作,所以你必须指出你得到的输入,这就是为什么。虽然Ob [0] .name会得到你的值,它会覆盖内存的错误部分,而不是指向你正在尝试获取输入的变量的内存位置。我希望这会满足你的问题。 – Deva 2014-12-03 06:19:19

1

正如@Gopi指出的那样,您需要为您的指针分配内存。这可以使用Malloc()函数完成。

#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 2014-12-03 05:34:24

+1

看看这个:[我需要投射malloc的结果吗?](http://stackoverflow.com/questions/605845/do-i-cast-the-result- of-malloc) – 2014-12-03 05:35:37

+0

正如Deva所指出的那样,我在ob [0] .name之前给出了'&'符号,并且它工作正常。我很惊讶它是如何工作的。一个指针保存我们输入的字符串的地址,那么这里需要一个'&'运算符。 – Ajax 2014-12-03 05:45:15

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

指针使用malloc()函数或释放calloc()函数。 如果你没有分配它会通过错误作为分段错误。

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

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);