我的代码有问题。我正在使用gcc编译器,当我编译并执行此代码时,我遇到了一个seg错误。我只是分配两个变量,name_1作为指针,name_2作为字符串。当我试图为这两个值提供字符串输入时,我得到一个seg错误。此seg错误始终与我正在使用的指针变量相关联。
下面我提供了错误的代码和屏幕截图。
#include <stdio.h>
int main()
{
char *name_1 ;
char name_2[10] ;
/* Getting 2 strings as an input from the user
and is stored in the pointer variable name_1 and name_2*/
scanf("%s",name_1) ;
scanf("%s",name_2) ;
/* Printing the values of the varibales
name_1 and name_2 in string format */
printf("\n%s",name_1) ;
printf("\n%s",name_2) ;
printf("\n\n") ;
return 0 ;
}
请在此代码中帮助我。
答案 0 :(得分:3)
char *name_1;
,是一个指针。最初,它指向一些随机垃圾。然后,您要求scanf
将字符串放在任何随机垃圾地址name_1
恰好指向您的程序启动时;这是未定义的行为。符合条件的C实现可以使该程序仅在周二才能按预期工作。 :)
如果你要传递一个指针,你必须先确保它指向一个有效的缓冲区。
此外,您对scanf
的调用中存在间接违规级别 - name_1
已经是指针。您不希望将指针传递给指向scanf
的指针;只是一个指针。
答案 1 :(得分:2)
问题的原始版本包含:
char *name_1;
...
scanf("%s", &name_1);
此问题已修订为包含:
char *name_1;
...
scanf("%s", name_1);
您尚未为name_1
指定任何空间。您还将char **
(即&name_1
)传递给scanf()
,格式为%s
,预计会获得char *
。
可能的解决方法:
int main(void)
{
char name_1[20];
char name_2[10];
scanf("%s", name_1);
scanf("%s", name_2);
另一种可能的解决办法:
int main(void)
{
char name_0[20];
char *name_1 = name_0;
char name_2[20];
scanf("%s", name_1);
scanf("%s", name_2);
答案 2 :(得分:0)
char *name_1 ;
...
scanf("%s",&name_1) ;
name_1
是一个悬空指针,你试图使用它,这是不正确的。
答案 3 :(得分:0)
指针char *name_1
应该指向某个东西。
通常遵循
Declaring a pointer variable does not create the type of variable,
it points at. It creates a pointer variable. So in case you are pointing
to a string buffer you need to specify the character array and a buffer
pointer and point to the address of the character array.
推荐的更改:
您可以让char *name_1
指向另一个字符数组或
你可以把它作为数组......