我有以下代码:
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);
}
这会在某个时刻导致段错误(可能是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);
}
确实发生了。这是怎么回事?这绝对不是我第一次观察到这种行为。
答案 0 :(得分:10)
stdout
行缓冲,这意味着您只有在发送换行符或显式调用fflush(stdout)
时才会获得更新的输出。
答案 1 :(得分:3)
在每个\n
的末尾使用printf
以确保刷新输出。否则它被缓冲而不是立即写入。
答案 2 :(得分:2)
将\n
放在第一个printf
的末尾,分段错误警告消除了最后一个输出行。我真的无法解释它,我只知道如果你把\n
写成了
答案 3 :(得分:2)
只有stderr
没有被缓冲... stdout
被缓冲,因此在缓冲区已满,遇到换行符或者您具体的情况下,您不一定会看到输出冲洗流。
因此,如果您要打印调试消息,请使用stderr
代替stdout
。