我有一个包含IP地址的文本文件(IP_CONFIG.txt)
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)
任何人都可以告诉我为什么会收到此错误,我该如何解决?
答案 0 :(得分:1)
分段错误的原因是访问越界内存。定义为
#define ROW 11
#define COL 2
unsigned char ip_list[ROW][COL];
使用
&ip_list[0][2]
由于off-by-one错误,无效。索引从0
开始,因此此处没有第3个元素。
此外,在使用返回的指针之前,请始终检查fopen()
的返回值。
然后,使用fscanf()
是错误的。
接下来,inet_addr("IP_CS");
我真的不知道应该做什么。
修复:
更好的方法是
fgets()
char
数组。int
并将其转换为另一个变量。server_addr
。答案 1 :(得分:1)
您正在尝试将字符串读入字符元素,即ip_list[0][2]
。