c - 为什么这个 printf 语句需要一个 & 符号?
问题描述
为什么我在 printf 语句中的数组之前需要一个 & 号,而其他时候 & 号只在 scanf 中使用?
全新的,所以如果你能尽可能简单地解释,那会有所帮助。
int main(void) {
char word[1];
scanf("%s", &word[0]);
printf("%s", word[0]);
return 0;
}
解决方案
你确实需要一个。没有它是不正确的,并导致未定义的行为,这可能导致任何事情发生(即使程序看起来正常工作)。此外,word[1]
只能保存空字符串的空终止符,除此之外,它会导致缓冲区溢出,也会导致未定义的行为。它应该是:
int main(void) {
char word[10]; // or any value that is big enough for the input that your anticipating
scanf("%9s", &word[0]);
printf("%s", &word[0]);
return 0;
}
当然你也可以&word[0]
用word
.
另请注意,我输入的%9s
不仅仅是调用,这意味着它将获得最多的字符,添加的空终止符适合我们作为示例的字符。这样,如果用户输入的内容太大,您就不会得到未定义的行为,而是会截断该输入。%s
scanf
9
word[10]
推荐阅读
- sql-server - 如何从此结果集中获取缺失的数据?
- prolog - 带参数的 Prolog DCG
- r - 带有 MLR 的 makeClassif - ID 列从任务中排除
- scrapy - 使用扩展发送带有抓取数据的电子邮件
- mysql - 如何找到我与其他用户的距离?
- powershell - 从 Active Directory 为用户读取组时,“GetAuthorizationGroups”引发异常
- javascript - 如何只用 js 切换一次类
- javascript - 在 Java Nashorn 中使用 JSON.parse
- laravel - Laravel Eleqent 如何在 Postgresql 中使用 DATE_FORMAT
- python-3.x - 解压 .zip 文件并使用 python 和 boto 3 传输到 s3 存储桶