【发布时间】:2012-11-14 17:28:10
【问题描述】:
我对这段代码有疑问。我正在使用 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 ;
}
请在这段代码中帮助我。
【问题讨论】:
-
更改问题以使已经提供的答案无效不是一个好主意。可以留下原件——也许作为评论——并进行更正;仅仅更正代码并使您得到的答案无效是不行的。
-
请注意,如果您使用 GCC 并使用
-Wall进行编译,您会收到编译器关于您的错误的警告。如果您使用 GCC,请确保使用(至少)-Wall进行编译。如果您使用的是其他编译器,请了解如何打开更多警告。 -
先生,现在我实际上有更多的疑问。每当我声明一个变量时,它不是分配空间吗?
-
name_1的空间已分配;它是一个char *,因此分配了足够的空间来存储一个char指针。问题之一是您从未初始化指针以指向某物。问题的另一部分是scanf()不仅假设指针已初始化,还假设它已初始化,以便它指向一个足够大的内存区域以存储要由scanf()读取的字符串,包括终止为空。通过将name_1的定义更改为char name_1[20],您可以确保字符串有20 个字节的空间。 -
[...continued...] 如果您将其更改为:
char name_0[20]; char *name_1 = name_0;,那么您已为scanf()分配空间来存储数据,并初始化name_1以指向该空间空间。但是,您可以随后改变主意,让name_1指向不同的区域(例如name_2),如果您愿意的话。哪个最有意义取决于您在读取数据后将如何处理name_1。
标签: c