以正确的方式使用fgets()

时间:2015-05-28 14:39:27

标签: c embedded chat sizeof fgets

我们在嵌入式系统编程(C)中有一个本学期的项目。我做了一个客户端/服务器程序(聊天程序),但是我的教授说当我使用fgets时,它不是资源友好的,但我不知道为什么。

这是我的来源:

if (argc == 4){
   strcpy(nick, argv[3]);
   strcat(nick,":");
}
else if (argc == 3){
    printf ("Please type your Nickname!\n");
    fgets (nick,sizeof(nick),stdin);
    nick[strlen(nick)-1]=':';
}
else{
    usage (argv[0]);
}

1 个答案:

答案 0 :(得分:1)

当然,解决方案是“手动”读取输入,在C中产生大量指令,但要小心资源和CPU:

else if (argc == 3) {
    printf ("Please type your Nickname!\n");
    int i= 0;
    while ((c=fgetc(stdin))!='\n' && i<sizeof(nick)-2) nick[i++]= c;
    nick[i++]=':'; nick[i++]= '\0';
}

(这假设nick是一个字符数组,而不是指针。否则,nick的大小必须作为参数给出,sizeof(nick)-2变为nick_size-2。)