【C&C++】为什么 scanf 函数在读取字符串时不需要用取地址运算符 &

这篇具有很好参考价值的文章主要介绍了【C&C++】为什么 scanf 函数在读取字符串时不需要用取地址运算符 &。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在C语言中如何使用 scanf 读取字符串

在C语言中,字符串实际上是字符数组,所以我们可以使用scanf函数来读取字符串。但是,需要注意的是,scanf在读取字符串时会在遇到空格、制表符或换行符时停止。因此,它不能用于读取包含空格的字符串。

以下是使用scanf读取字符串的基本示例:

char str[100];
scanf("%s", str);

在这个例子中,我们定义了一个可以容纳100个字符的字符数组str。然后,我们使用scanf函数和"%s"格式字符串来读取一个字符串,并将其存储在str中。

如果你想读取一行文本(包括空格),你可以使用fgets函数,如下所示:

char str[100];
fgets(str, 100, stdin);

在这个例子中,fgets函数从标准输入stdin读取最多99个字符(最后一个字符是\0,代表字符串的结束)并将它们存储在str中。

为什么 scanf 函数在读取字符串时不需要用取地址运算符 &

在C语言中,数组名(在这种情况下是 str)本质上是一个指针,它指向数组的第一个元素。因此,当你写 str 时,你实际上是在提供数组的第一个元素的地址。这就是为什么 scanf 在读取字符串时不需要 & 的原因。

在大多数情况下,当你需要提供变量的地址给函数(如 scanf)时,你需要使用 & 运算符。这是因为对于基本类型(如 intfloat 等),你需要明确地获取它们的地址。

但是,对于数组,情况就不同了。数组名本身就是一个指向数组第一个元素的指针,因此你不需要使用 & 运算符。这适用于所有类型的数组,包括字符数组(也就是字符串)。

例如,以下两个语句在功能上是等价的:

scanf("%s", str);
scanf("%s", &str[0]);

在这两种情况下,scanf 函数都会将输入的字符串存储在数组 str 的开始位置。文章来源地址https://www.toymoban.com/news/detail-809454.html

到了这里,关于【C&C++】为什么 scanf 函数在读取字符串时不需要用取地址运算符 &的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么说 Go 语言字符串是不可变的?

    原文链接: 为什么说 Go 语言字符串是不可变的? 最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢? 这个问题本身并不困难,但对于新手来说确实容易产生困惑,今天就来回答一下。 首先来看看它

    2024年02月07日
    浏览(48)
  • 为什么 IDEA 建议去掉 StringBuilder,而要使用 “+” 拼接字符串?

    作者:京东零售 姜波 来源:京东云开发者社区 各位小伙伴在字符串拼接时应该都见过下面这种提示: 内容翻译:报告StringBuffer、StringBuilder或StringJoiner的任何用法,这些用法可以用单个java.lang.String串联来替换。使用字符串串联可以使代码更短、更简单。只有当得到的串联至

    2024年02月05日
    浏览(54)
  • Java开发手册中为什么不建议在for循环中使用“+“进行字符串操作

    java开发手册中对于循环体中进行字符串的拼接要求如下: 【推荐】循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。 说明:下例中,反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行 append操作, 最后通过 toString 方法返回

    2024年02月08日
    浏览(48)
  • [正式学习java③]——字符串在内存中的存储方式、为什么字符串不可变、字符串的拼接原理,键盘录入的小细节。

    🌈键盘敲烂,年薪30万🌈 目录 一、字符串 1.字符串在内存中的存储方式 2.创建字符串对象的两种方式 3.两种创建方式的区别 4.字符串对象一旦创建不可改变 - 为什么??? 5.字符串的拼接 6.字符串的拼接原理 二、键盘录入 三、总结 🔥在java中,内存中有两个地方可以存储

    2024年02月08日
    浏览(64)
  • 【Golang】Golang进阶系列教程--为什么说 Go 语言字符串是不可变的?

    最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢? 这个问题本身并不困难,但对于新手来说确实容易产生困惑,今天就来回答一下。 首先来看看它的底层结构: 和切片的结构很像,只不过少了一个

    2024年02月14日
    浏览(47)
  • 【Unity细节】Unity中为什么用字符串加载对象,检查多便都加载不出来—(命名细节)

    👨‍💻个人主页 :@元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏 :unity细节和bug 😶‍🌫️优质专栏 ⭐【软件设计师高频考点暴击】 明明名字对上了,类型也对上了,为什么还是加载不出来 命名时,多添加了空格 把空

    2024年02月05日
    浏览(57)
  • 【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串

    字符数组的定义方法与前面介绍的一维数组类似.例如, 字符数组的初始化可以采用以下方式. (1)对每个字符单独赋值进行初始化.例如, (2)对整个数组进行初始化.例如, 但工作中一般不用以上两种初始化方式,因为字符数组一般用来存取字符串.通常采用的初始化方式是

    2024年01月25日
    浏览(53)
  • 让Windows上vscode的C语言scanf函数可以读取中文字符

    区域设置–时钟和区域–区域–管理–更系统区域设置–(不要勾选)使用UTF-8。 查看验证当前字符集: cmd chcp 活动代码页: 936 936就是简体中文GBK 点击左下角设置齿轮 – 点击右上角文本样的图标 就可以打开json配置文件

    2024年01月17日
    浏览(43)
  • 为什么使用fitz读取pdf转为图片模糊

    出现这样的原因有可能是因为,在进行页面读取的时候未指定读取的dpi是多少,使得默认读取去96dpi 所以在进行读取时使用 遇到苦难找文档哦 牢记 : color{red}{牢记:} 牢记 : help()和查看官方文档呀 相关的其他参数还有: matrix:指定应用于页面的转换矩阵(fitz.Matrix 对象)。默

    2024年02月12日
    浏览(61)
  • 为什么Tomcat的NIO在读取body时要模拟阻塞?

    文章首发地址 Tomcat的NIO完全可以以非阻塞方式处理IO,为什么在读取body部分时要模拟阻塞呢?在Tomcat的NIO读取HTTP请求时,为了保证请求的正确性和可靠性,需要模拟阻塞模式,这是因为servlet规范里定义了ServletInputStream在读数据时是阻塞模式。 ServletInputStream在读取数据时是阻

    2024年02月13日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包