奇怪的运行时问题:printf中途停止工作

时间:2017-02-13 18:07:26

标签: c networking gdb printf

当我发现一个非常奇怪的行为时,我正在写一个chat server program作为我网络实验室的一部分:

        printf("Recieved login info.\n"); //works
        printf("Username: %s\n", ui->username); //works
        printf("Passward: %s\n", ui->password); //works

        //TO_AUTHENTICATE, if failure, send appropriate reply
        printf("makeitwork"); //does not work
        while(ui != NULL)
        {
                printf("here2");//does not work
                if(strcmp(ui->username, record.username) == 0 && strcmp(ui->password, record.password) == 0)
                {
                        strcpy(userRecords[sockfd].username, record.username);
                        userRecords[sockfd].status = ONLINE;

                        printf("Successfully authenticated %s.\n", userRecords[sockfd].username);

                //      sendOnlineUsers(sockfd, registeredUsers);

                        return SUCCESS;
                }
                ui = ui->next;
        }

在上面的代码段中,第一个,第二个和第三个printf语句有效,但从第4个开始,它不起作用。

但如果我注释掉if语句printf("here2");,一切正常。

我使用gdb逐行执行程序:

(gdb) 
Recieved login info.
94      printf("Username: %s\n", ui->username);
(gdb) 
Username: user-1
95      printf("Passward: %s\n", ui->password);
(gdb) 
Passward: pass
98      printf("makeitwork");
(gdb) 
99      while(ui != NULL)
(gdb) 
101         printf("here2");
(gdb) 
102         if(strcmp(ui->username, record.username) == 0i)//&& strcmp(ui->password, record.password) == 0)

printf正在执行,但终端上没有输出。

发生了什么事?

1 个答案:

答案 0 :(得分:1)

您需要刷新缓冲区

添加

fflush(stdout);

在最后没有printf的{​​{1}}之后

相关问题