Why do programs sometimes “skip over” printfs?

試著忘記壹切 提交于 2019-12-04 06:08:38

问题


I have the following code:

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);
}

This causes a segfault at some point, (probably get_child_path), but the first printf never happens, even though when I fix the code to be this:

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);
}

It does happen. What's going on? This is definitely not the first time I observed this behavior.


回答1:


stdout is line-buffered by default, which means that you only get updated output when you send a newline character, or when you explicitly call fflush(stdout).




回答2:


Use \n in the end of each printf to make sure the output is flushed. Otherwise it's buffered and not immediately written.




回答3:


Only stderr is not buffered ... stdout is buffered, and therefore you won't necessarily see the output until either the buffer is full, a newline character has been encountered, or you specifically flush the stream.

Therefore, if you're wanting to print debug messages, use stderr instead of stdout.




回答4:


put \n in the end of the first printf, the segmentation fault warning eliminates the last output line. I cant really explain it, I just know that if you put a \n it is written



来源:https://stackoverflow.com/questions/7307477/why-do-programs-sometimes-skip-over-printfs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!