c getprotobyname获取协议信息

时间:2014-09-29 10:42:30

标签: c network-programming

我刚刚开始学习C编程和练习,我找到了这个任务。首先,我必须扫描协议的名称。然后我必须检查协议的正式名称,编号和别名。因此,如果我输入tcp,输出将如下所示:
官方名称:tcp
原型号:6
别名TCP

这是我到目前为止所得到的。当我运行它并输入ip或tcp时它不会给我任何错误。但它说没有找到协议。

提前感谢您的帮助。

#include <netdb.h>
#include <stdio.h>


int main(){
    char  name[200];
    int i;

    struct protoent *proto = getprotobyname(name);

    printf("Enter protocol name: ");        
    scanf("%c", name);

    proto = getprotobyname( name );  


    if ( proto != NULL )
    {
        printf("official name: %s\n", proto->p_name);

        printf("proto number: %d\n", proto->p_proto);

        for ( i = 0; proto->p_aliases[i] != 0; i++ ){
                 printf("alias: %s\n", proto->p_aliases[i]);
            }
    }
    else{
        perror("protocol not found");
    }


        return 0;
}

2 个答案:

答案 0 :(得分:1)

以下是错误:scanf("%c", name);

您只是通过将格式说明符传递给带有scanf的{​​{1}}来阅读单个字符。如果此%c返回无效,则会看到打印getprotobyname()

相反,您需要使用protocol not found从标准输入读取整个字符串。

答案 1 :(得分:1)

 char  name[200];
 int i;
 struct protoent *proto = getprotobyname(name);

此处使用name,之后您通过

阅读name
 scanf("%c", name);

读取char数组也是错误的。需要%s格式说明符才能读取char数组。所以它应该是

 scanf("%s", name);

您的代码应为

int main(){
    char  name[200];
    int i;

    struct protoent *proto;

    printf("Enter protocol name: ");        
    scanf("%s", name);

    proto = getprotobyname( name );  


    if ( proto != NULL )
    {
        printf("official name: %s\n", proto->p_name);

        printf("proto number: %d\n", proto->p_proto);

        for ( i = 0; proto->p_aliases[i] != 0; i++ ){
                 printf("alias: %s\n", proto->p_aliases[i]);
            }
    }
    else{
        perror("protocol not found");
    }


        return 0;
}
相关问题