1

我对这段代码有疑问。我正在使用 gcc 编译器,当我编译并执行此代码时,我遇到了 seg 错误。我只是分配了两个变量,name_1 作为指针,name_2 作为字符串。当我尝试为这两个值提供字符串输入时,我遇到了段错误。此段错误始终与我正在使用的指针变量相关联。

下面我提供了错误的代码和屏幕截图。

#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 ;
}

请在这段代码中帮助我。

段错误

4

4 回答 4

3

char *name_1;, 是一个指针。最初,它指向一些随机垃圾。然后,您要求在程序启动时碰巧指向的scanf随机垃圾地址放置一个字符串;name_1这是未定义的行为。如果需要,一个符合 C 的 C 实现可以让这个程序只在星期二按预期工作。:)

如果你要传递一个指针,你必须首先确保它指向一个有效的缓冲区。

此外,您在调用中存在一定程度的间接违规scanf--name_1已经是一个指针。您不想将指针传递给指向scanf; 只是一个指针。

于 2012-11-27T06:15:40.647 回答
2

问题的原始版本包含:

char *name_1;
...
scanf("%s", &name_1);

该问题已被修改为包含:

char *name_1;
...
scanf("%s", name_1);

您还没有为name_1指向分配任何空间。您还将 a 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);
于 2012-11-27T06:16:43.940 回答
0
char *name_1 ;
...
scanf("%s",&name_1) ;

name_1是一个悬空指针,您正在尝试使用它,这是不正确的。

于 2012-11-27T06:15:12.007 回答
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指向另一个字符数组或

  • 你可以把它作为一个数组..

于 2012-11-27T06:33:55.913 回答