为什么程序有时会"跳过"printfs?

Eps*_*tor 0 c printf segmentation-fault

我有以下代码:

if (!strcmp(ent_child->d_name, "eeprom")){
    printf("\tread_from_driver: found a match! ");//DEBUG
    get_child_path(child_path, child_path, "eeprom");
    printf("The path is: %s\n", child_path);//DEBUG
    read_eeprom(child_path);
}
Run Code Online (Sandbox Code Playgroud)

这会在某些时候导致段错误(可能是get_child_path),但是第一个printf永远不会发生,即使我将代码修改为:

if (!strcmp(ent_child->d_name, "eeprom")){
    while(1)
         printf("\tread_from_driver: found a match! ");//DEBUG
    get_child_path(child_path, child_path, "eeprom");
    printf("The path is: %s\n", child_path);//DEBUG
    read_eeprom(child_path);
}
Run Code Online (Sandbox Code Playgroud)

它确实发生了.这是怎么回事?这绝对不是我第一次观察到这种行为.

Oli*_*rth 10

stdout默认情况下是行缓冲,这意味着只有在发送换行符时或显式调用时才会获得更新的输出fflush(stdout).