用C语言从文本文件中读取IP地址
我有一个文本文件(IP_CONFIG.txt),其中包含如下IP地址用C语言从文本文件中读取IP地址,c,file,segmentation-fault,scanf,C,File,Segmentation Fault,Scanf,我有一个文本文件(IP_CONFIG.txt),其中包含如下IP地址 CS 192.168.128.3 PORT 1111 <<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; un
CS 192.168.128.3
PORT 1111
<<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
}
}
我想在我的C代码中用一个参数读取文本文件中提到的IP。我的代码如下所示
CS 192.168.128.3
PORT 1111
<<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
}
}
有人能告诉我为什么会出现此错误,以及如何解决它吗?分段错误的原因是访问超限内存。定义为
#define ROW 11
#define COL 2
unsigned char ip_list[ROW][COL];
使用
&ip_list[0][2]
由于错误而无效。索引从0
开始,因此这里没有第三个元素
另外,在使用返回的指针之前,请始终检查fopen()
的返回值
然后,使用fscanf()
是错误的
接下来,inet_addr(“IP_CS”)我真的不知道这应该做什么
修复:
更好的方法是
使用fgets()
基于分隔符空间标记(根据需要更改)
将反映IP地址的令牌值复制到char
数组
在端口号的情况下,将令牌转换为int
,并放入另一个变量
使用它们填充server\u addr
您正在尝试将字符串读入字符元素,即ip_列表[0][2]
为什么要将fscanf
的结果分配给ip_CS
和端口_CS
fscanf
返回它读取的项目数。inet\u addr(“IP\u CS”)
应该做什么?inet\u addr()
的参数应该是类似于192.168.128.3
的地址。既然您将IP_CS
放在引号中,它只是一个字符串,而不是一个变量。为什么在尝试使用fopen()访问文件之前不检查它的结果?您使用IDE吗?若否,原因为何?如果这样做,请在这段非常小的代码的开头设置一个断点,然后逐行遍历它。当您到达segfaults所在的行时,应该很明显什么是错误的(并且您可以检查变量的值并查看其中一个为NULL)。好了,这教会了你如何钓鱼。如果你已经是新手,你很可能不需要在这里发帖。他的程序还有很多其他问题。祝你解释得顺利。@Barmar你说得很对,但我想指出分割错误的主要问题。:-)@你能看看我最新的答案吗!!并检查问题??Thanks@Barmar谢谢你快速专业的回答。评价