【发布时间】:2015-02-20 09:50:27
【问题描述】:
我有一个文本文件 (IP_CONFIG.txt),其中包含这样的 IP 地址
CS 192.168.128.3
PORT 1111
我想用一个参数在我的 C 代码的文本文件中读取提到的 IP。我的代码是这样的
<<header files>>
#define ROW 11
#define COL 2
int main(int argc,char **argv)
{
FILE *f = fopen("IP_CONFIG.txt", "r");
unsigned char IP_CS;
int PORT_CS;
unsigned char ip_list[ROW][COL];
IP_CS = fscanf(f,"%s",&ip_list[0][2]);
PORT_CS = fscanf(f,"%d",&ip_list[1][2]);
// I use this values in my program for configuring the server address
bzero(&(server_addr.sin_zero),sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT_CS);
server_addr.sin_addr.s_addr = inet_addr("IP_CS");
while(1)
{
//basic socket functions
}
}
这里的程序正在编译,没有任何错误,但是当我执行程序时它显示
Segmentation fault (core dumped)
谁能告诉我为什么会收到此错误以及如何解决?
【问题讨论】:
-
为什么要将
fscanf的结果分配给IP_CS和PORT_CS?fscanf返回它读取的项目数。 -
inet_addr("IP_CS")应该做什么?inet_addr()的参数应该是像192.168.128.3这样的地址。由于您将IP_CS放在引号中,因此它只是一个字符串,而不是变量。 -
为什么在尝试使用 fopen() 访问文件之前不检查它的结果?
-
您使用 IDE 吗?如果不是,为什么不呢?如果这样做,请在这个非常小的代码的开头设置一个断点,并逐行遍历它。当您到达段错误的行时,应该很明显出了什么问题(并且您可以检查变量的值并看到其中一个为 NULL)。在那里,它教你如何钓鱼。如果您已经是新手,您很可能不需要在此处发布问题。
标签: c file segmentation-fault scanf