不羡


私信TA

用户名:dotcpp0635554

访问量:81

签 名:

用知识救赎自我

等  级
排  名 1274
经  验 3018
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 湖南师范大学
专  业 计算机科学与技术

  自我简介:

TA的其他文章

解题思路:使用fgets函数替换gets函数,避免缓冲区溢出。使用sscanf函数格式化输入。

注意事项:1.gets函数由于它的不安全已经不在使用,因此使用fgets函数进行替换。

2.在进行多个字符串的输入时,将字符串末的换行符'\n'替换成'\0'。



参考代码:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>


#define MAX_INPUT_SIZE 100


int is_valid_ip(int a, int b, int c, int d) {

    return (a >= 0 && a <= 255) && (b >= 0 && b <= 255) && (c >= 0 && c <= 255) && (d >= 0 && d <= 255);

}


int main() {

    int a, b, c, d;

    char buffer[MAX_INPUT_SIZE];


    // 循环读取每一行输入

    while (fgets(buffer, sizeof(buffer), stdin)) {

        // 去掉输入末尾的换行符

        buffer[strcspn(buffer, "\n")] = '\0';


        // 检查是否为结束标志 "End of file"

        if (strcmp(buffer, "End of file") == 0) {

            return 0;

        }


        // 解析 IP 地址部分

        if (sscanf(buffer, "%d.%d.%d.%d", &a, &b, &c, &d) == 4) {

            // 验证 IP 地址并输出结果

            if (is_valid_ip(a, b, c, d)) {

                printf("Y\n");

            } else {

                printf("N\n");

            }

        } else {

            // 如果解析失败

            printf("N\n");

        }

    }


    return 0;

}


 

0.0分

0 人评分

  评论区

  • «
  • »