更正sscanf()原型,“int sscanf(const char * s,const char * format,...);”或者int sscanf(char * s,const char * format,...);?

时间:2013-05-18 14:07:47

标签: c arrays const scanf

以下是sscanf()link)中描述的cplusplusreference函数的原型:

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

但我发现它有些可疑。不仅第一个参数的类型与许多其他字符串库函数不同,如strcpy()1)和strcat()({{3} }(const char* vs char*),但是当函数的目的是写入它时,我们怎么能使第一个参数常量指向数组?(改变内容数组)使用该指针!!

我的意思是,在int sscanf (const char * s,const char * format, ...);我们不是通过const限定符告诉我们无法使用s更改s指向的数组吗?这是该网站上的拼写错误,还是我无法理解?请解释一下。

5 个答案:

答案 0 :(得分:1)

const char * s

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

答案 1 :(得分:0)

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

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

因此,正确的sscanf原型是" int sscanf(const char * s,const char * format,...);",因为它不会修改源字符串,只是阅读它。

如果您不确定函数的原型,那么关于此函数的手册页是参考

答案 2 :(得分:0)

使第一个参数作为函数的常量的目的是确保函数在任何方式或方式下都会改变调用期间字符串s的内容....它提供类似于只读访问权限的内容字符串s .....

语法似乎很好。

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

答案 3 :(得分:0)

通过C99,scanf原型是:

int scanf(const char* restrict s, const char* restrict format, ...);

答案 4 :(得分:0)

在这个原型中:

int sscanf ( const char * s, const char * format, ...);
  • int是只读输出,字段匹配计数或错误报告。
  • const char *s只读来源,从中读取字符。
  • const char *format是可写目标的只读规范。
  • ...将成为转化输出的可写地址列表,详见format

因此,s输入字符串当然可以是只读字符串,因为sscanf被信任不会覆盖该字符串非常重要。