You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用inet_pton转换文本文件IP地址返回0无法生效问题求助

问题排查及解决

你代码的核心问题有以下几点:

  • inet_pton的调用逻辑写在了while(fgets(...))循环外部,循环会把整个文件的所有行全部读完才会执行一次地址转换逻辑,此时line变量要么存储的是文件最后一行的内容,要么读到文件EOF后内容未定义,自然无法正常解析
  • fgets读取每行内容时会自动把行尾的换行符\n写入目标缓冲区,带换行符的IP字符串不符合inet_pton的入参格式要求,会被判定为非法地址返回0
  • 缺少fopen返回值判空逻辑,若文件路径错误、权限不足导致打开失败,后续操作都会出现异常
  • 未校验line读取到的内容是否合法,直接传入转换函数容易出现不可预期的问题

修正后的参考代码

#include <stdio.h>
#include <arpa/inet.h>
#include <string.h>

int main() {
    char line[16]; // IPv4最长15字符+结束符,足够容纳
    struct in_addr a;
    FILE *whitelist = fopen("/home/...../whitlist.txt","r");
    // 先判断文件是否打开成功
    if (whitelist == NULL) {
        perror("fopen failed");
        return -1;
    }

    while(fgets(line, sizeof(line), whitelist) ) {
        // 去掉行尾的换行符
        line[strcspn(line, "\n")] = '\0';
        printf("当前读取IP:%s\n", line);
        // 转换逻辑放在循环内部,每读一行处理一行
        if(inet_pton(AF_INET, line, &a) == 1){
            printf("转换成功\n");
        } else if(inet_pton(AF_INET, line, &a) == 0){
            printf("非法IP地址格式\n");
        } else {
            perror("inet_pton执行出错");
        }
    }

    fclose(whitelist);
    return 0;
}

内容的提问来源于stack exchange,提问作者my3589

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:18:03