【发布时间】:2015-04-27 01:33:23
【问题描述】:
在为标准库的许多字符串函数提供缓冲区的各种情况下,是否保证缓冲区不会被修改超出空终止符?例如:
char buffer[17] = "abcdefghijklmnop";
sscanf("123", "%16s", buffer);
现在是否要求buffer 等于"123\0efghijklmnop"?
另一个例子:
char buffer[10];
fgets(buffer, 10, fp);
如果读取的行只有 3 个字符长,可以确定第 6 个字符与调用 fgets 之前相同吗?
【问题讨论】:
-
虽然这是事实,但对于许多其他边缘情况,该标准并未提供保证。
-
无法想象某事并不是假设某些编译器编写者或库实现者无法想象的好理由。如果所有 C 程序员都有同样的想象力,那就太无聊了。
-
@Ángel 我相信你没有抓住问题的重点。
-
更好的问题是“为什么重要?”。您不应该依赖幕后和未指明的行为。如果需要该行为,则应创建/使用明确打算以这种方式运行的显式函数。
-
了解暗角的位置有助于避免它们。
标签: c standards c-standard-library