c - 为什么这个语句在scanf语句中不需要 '&'符号 'scanf( "%*[\n]%[^\n ]",arr);'

标签 c

有人可以解释一下 C 语句的含义和工作原理吗

scanf( "%*[\n]%[^\n]",arr);

最佳答案

在 C 语言中,scanf 经常用于填充 char 数组。也就是说,arr 是一个数组,声明如下:

char arr[99];

当作为函数的参数提供时,it's converted to a pointer to first element 。也就是说,scanf 接收一个指向数组第一个元素的指针,就像它期望使用 %[ 格式说明符一样。

顺便说一句,这是一个可能的缓冲区溢出的示例。此示例读取一行文本。如果该行很长(在我的示例中大于 98 字节),scanf 将导致缓冲区溢出。您的示例实际上执行了与 gets 非常相似的操作,它已被弃用,因为它可能导致溢出(并且无法避免)。对您的格式使用绑定(bind),如所述here .

关于c - 为什么这个语句在scanf语句中不需要 '&'符号 'scanf( "%*[\n]%[^\n ]",arr);',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38643182/

相关文章:

c - 如何在 if 语句中指定单引号?

c - 在 TCP 中发送/处理部分数据写入

c - 在多线程服务器中使用套接字

c - 在 C 中处理 MacOSX 上的 BSTR

c - 混合编程发布失败但调试成功

c - 格式化字符串漏洞利用——打开 root shell

c - 以位为单位增加大小的有效条件

c - 在 C 中输入,特例?

c - 为什么第一个整数值在 if 之后变为零

C:退出函数时丢失字符串