0

我可以知道 sscanf 是否修改了传递给它的字符串。或者谁能​​指出我在哪里可以找到 sscanf 的源代码?

我下载了 glibc 并发现以下内容:

extern int sscanf (__const char *__restrict __s,
               __const char *__restrict __format, ...) __THROW;
extern int sscanf (__const char *__restrict __s,
               __const char *__restrict __format, ...) __THROW;
4

2 回答 2

4

sscanf从不修改您传递给它的字符串;你可以通过const限定词来判断。

sscanf您可以在其Gitweb上找到 Glibc 源代码。

于 2012-04-13T09:57:19.947 回答
2

有几个很好的 C 资源。因为glibcGNU C 库参考手册应该是你的圣经。同样,一般来说,查找特定命令的文档,谷歌搜索“man 命令”通常会很快找到你想要的东西。

更具体地说sscanf(),GNU C 库手册明确指出,

如果复制发生在重叠的对象之间,则此函数的行为是未定义的——例如,如果 s 也作为参数给出以接收在 '%s'、'%S' 或 '%[ 控制下读取的字符串' 转换。

所以,通常它不会做任何事情,但是如果你在你正在读取的字符串和你正在分配的变量之间做一些松鼠式的自引用,它将有未定义的行为。

于 2012-04-13T10:08:33.970 回答