0

这是(链接sscanf())中描述的函数原型:cplusplusreference

 int sscanf ( const char * s, const char * format, ...);

但我发现它有些可疑。不仅第一个参数的类型与许多其他字符串库函数(如strcpy()1)和strcat()2)(const char*vs char*)不同,而且我们如何使第一个指向的数组看起来也很奇怪当函数的目的是使用该指针写入它(更改数组的内容)时,参数常量!

我的意思是,int sscanf (const char * s,const char * format, ...);我们不是通过const限定符告诉我们不能更改susing指向的数组s吗?这是该网站上的错字,还是我无法理解某些内容?请解释。

4

5 回答 5

1

const char * s

sscanf不向s字符串写入任何内容,s是输入字符串。

于 2013-05-18T14:10:16.253 回答
0

在 strcpy 和 strcat 中,第一个参数(目标)不是 const,因为当然,函数会修改它们。

通常,在修改字符串的函数中,第一个参数是目标。

所以,sscanf的正确原型是“int sscanf(const char * s, const char * format, ...);”,因为它不会修改源字符串,直接读取即可。

如果您不确定函数的原型,请参考有关此函数的手册页

于 2013-05-18T14:14:00.737 回答
0

将函数的第一个参数设为常量的目的是确保函数在调用期间以任何方式或方式更改字符串 s 的内容......它提供了类似对字符串 s 的只读访问权限......

语法似乎很好。

仍然有疑问检查 man.... 或任何 C 书。

于 2013-05-18T14:17:53.083 回答
0

通过 C99,scanf 原型为:

int scanf(const char* restrict s, const char* restrict format, ...);
于 2013-05-18T15:06:51.910 回答
0

在这个原型中:

int sscanf ( const char * s, const char * format, ...);
  • int是一个只读输出,字段匹配计数或错误报告。
  • const char *s读取字符的只读源。
  • const char *format是可写目标的只读规范。
  • ...成为转换后的输出进入的可写地址列表,如format.

因此,相应地,输入字符串s当然可以是只读字符串,因为sscanf信任不覆盖该事物是相当重要的。

于 2013-05-18T15:12:33.387 回答