我是否可以知道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;
答案 0 :(得分:4)
sscanf
永远不会修改传递给它的字符串;你可以通过const
限定符来判断。
您可以在Gitweb上找到sscanf
的Glibc源代码。
答案 1 :(得分:2)
有一些好的C资源。对于glibc
,GNU C Library Reference Manual应该是您的圣经。另外一般来说,找到特定命令的文档,谷歌搜索“man command”通常可以很快找到你想要的东西。
更具体地针对sscanf()
,GNU C Library Manuals明确说明,
如果在对象之间进行复制,则此函数的行为是未定义的 重叠 - 例如,如果s也作为参数给出,以接收读取的字符串 控制'%s','%S'或'%['转换。
所以,通常它不会做任何事情,但是如果你在正在阅读的字符串和你分配的变量之间做一些松散的自我引用,它将会有不确定的行为。