gpt4 book ai didi

c - 在 scanf() 中使用 & 符号

转载 作者:太空狗 更新时间:2023-10-29 16:09:47 25 4
gpt4 key购买 nike

当我编译 scanf("%s", &var); 时,gcc 发回警告:

warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[20]’

然而,当我编译 scanf("%s", var); 时,没有应用任何警告。这两段代码都有效,我正在阅读的书专门说要使用&符号,但即使在某些示例中也没有。

我的问题是,我是否应该继续使用“&”符号,即使书中没有具体说明?

最佳答案

根据您发布的内容,var 是一个字符数组。在这种情况下,您不需要 & 符号,只需名称 var 将根据需要评估为 (char *)。

详细信息:

scanf 需要一个指向将存储输入的变量的指针。对于字符串,您需要一个指向内存中字符数组的指针,该数组的大小足以存储读入的任何字符串。当您声明类似 char var[100] 的内容时,您为100 个 char,其中 var[0] 指的是第一个字符,var[99] 指的是第 100 个字符。数组名称本身的计算结果与 &var[0] 完全相同,它是指向序列第一个字符的指针,这正是 scanf 所需要的。所以您需要做的就是 scanf("%s", var);,但请注意 scanf 不会对输入字符串强制执行大小限制,因此如果用户输入一个 101 长度的字符串,您将遇到缓冲区溢出,这将导致错误,甚至更糟的是安全问题。比较好的选择一般是fgets这确实允许输入字符串的大小限制。

关于c - 在 scanf() 中使用 & 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2439726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com