gpt4 book ai didi

c - 将一行读入C中的char数组

转载 作者:太空狗 更新时间:2023-10-29 15:38:03 25 4
gpt4 key购买 nike

我正在尝试读取 C 语言的文件,其中包含以下形式的 IP 地址列表。

1 121.20.35.8 5634
2 179.105.43.24 2345
3 122.45.36.102 5096
4 28.105.63.41 8081
5 128.20.6.250 1864

我正在尝试将 IP 地址写入相关索引。尽管相关索引可能不正确。如前所述,这种类型的文件是很有可能的。

 3 122.45.36.102 5096
1 121.20.35.8 5634
4 28.105.63.41 8081
2 179.105.43.24 2345
5 128.20.6.250 1864

我已经分配了一个数组来保存地址

    char** servers = malloc(sizeof(char*)*10);
for (int i = 0; i < 10; ++i)
{
servers[i] = malloc(sizeof(char)*(MAX_IP + 1));
}

并使用此代码读取文件。这里的MAX_IP是255.255.255.255的strlen

   static const char filename[] = "file.txt";
FILE *file = fopen ( filename, "r" );
char line [MAX_IP + 10];
while ( fgets ( line, sizeof line, file ) != NULL ) /* read a line */
{
//split the line into index and IP address and store the IP address in the relevant index
}
fclose ( file );

所以现在我想以一种将行拆分为索引和 IP 地址并将 IP 地址存储在相关索引中的方式读取文件。需要一些帮助来了解最有效的方法。

最佳答案

while ( fgets ( line, sizeof line, file ) != NULL )
{ int idx, port; char ip[MAX_IP + 1];
sscanf(line, " %d %s %d", &idx, ip, &port);
strncpy(servers[idx-1], ip, MAX_IP + 1);
}

当然,如果您不确定输入文件的正确性,您应该添加错误检查。

编辑:由于您要求的是“有效方式”,因此您可以一步完成阅读,而不是阅读一行然后对其进行解析。您也可以这样做:

int idx, port; char ip[MAX_IP + 1];
while (3 == fscanf(file, " %d %s %d", &idx, ip, &port))
memcpy(servers[idx-1], ip, MAX_IP + 1);

请注意 memcpy 比 strcpy 快,除非源字符串比缓冲区的大小小得多,ip 地址很少出现这种情况...

关于c - 将一行读入C中的char数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33590228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com