终端不会让我打印指向字符串的指针而没有换行符 - C

时间:2014-10-25 01:08:34

标签: c string memory io output

因为标题说我有一个指向字符串的指针,但它不会让我打印出来而不在最后打印换行符。

这就是我所拥有的:

char *rcv_message = malloc(msg_len); /* where msg_len = 5, because input is "hello" we are not supposed to worry about the null terminator */

printf("%s", rcv_message);

如果没有新行,打印行不会打印任何内容。终端只是空白。

但是当我在最后添加一个新行时,例如:

printf("%s\n", rcv_message);

打印出消息。

出了什么问题?

1 个答案:

答案 0 :(得分:4)

没有什么是错的。默认情况下输出为“行缓冲”,这意味着在您编写换行符之前输出将不会发送到终端,或者使用fflush()强制输出,或者(在许多系统上)在标准上启动输入操作输入

顺便说一句,如果你不打算担心null终止符,那么你需要限制打印:

printf("%.5s", rcv_message);

但是你应该仔细考虑它。在分配的字符串中添加null会在数组的边界外写入。这是未定义的行为,未定义的行为是无条件的 - 不惜一切代价避免。