如何通过ubuntu中的c从文件中的特定位置获取字符串



我在一个名为"DNS"的文本文件中存储了一些网站名称及其相应的ip地址(随机(。对于一个特定的网站名称,我需要找到它对应的ip地址。我尝试了下面的C程序。它显示错误

Segmentation fault (core dumped)

我试图逐个字符地检查网站是否存在于文件中,如果发现,读取指针将停止在网站的最后一个字符处。跳过一个字符后,其余字符存储在一个名为ip的数组中。但同样的代码在windows中运行良好。当我在ubuntu中尝试时,它显示了上面的错误。代码是

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
// Write C code here
FILE* ptr = fopen("DNS.txt","r");
int found=0, i=0;
char website[20] = "google.com";
char ip[30];
char temp;
while ((temp=fgetc(ptr)) != EOF){
if (temp == website[i]){
i++;
if (i==strlen(website)){
found = 1;
break;
}
}
else
i=0;
}

if (found){
i=0;
temp = fgetc(ptr);
temp=fgetc(ptr);
while (temp != 'n'){
ip[i++]=temp;
temp=fgetc(ptr);
}
ip[i] = '';
printf("%s",ip);
}
else{
printf("Ip address not found");
}
return 0;
}

DNS文件看起来像

google.com-1234.45.6
youtube.com-5738.292.22
github.com-2374.2342.2

该文件存储在与程序相同的位置。

考虑到您的文件格式,只需在整行中使用fgets,然后使用类似strtoksscanf的东西将其拆分为名称和地址字段,然后将名称与所需名称进行比较会更容易。简单一点,你就可以让标准库做艰苦的工作(这就是它存在的原因(。

没有错误检查的不完整示例:

#define LINE_LENGTH 80 // or whatever your maximum input line length
// happens to be
...
char line[LINE_LENGTH+1] = {0}; 
while ( fgets( line, sizeof line, ptr ) )
{
char ip[LINE_LENGTH+1] = {0};
char name[LINE_LENGTH+1] = {0};
if ( sscanf( line, "%[^-]-%[^n]", name, ip ) == 2 )
{
if ( strcmp( name, website ) == 0 )
{
printf( "%s", ip );
break;
}
}
}

您需要添加一些错误检查,以处理比缓冲区大小更长的输入行和类似的鲁棒性,但这应该会引导您朝着正确的方向前进。

相关内容

  • 没有找到相关文章

最新更新