您好,欢迎进入u8国际电动伸缩门有限公司官网!
u8国际|u8国际官方网站|u8国际网址最新

联系我们

邮箱:youweb@admin.com
电话:@HASHKFK
地址:广东省广州市番禺经济开发区 在线咨询

u8国际常见问题

u8国际-u8国际官方网站-网址最新震惊!C 语言字符串处理有很多坑?

发布日期:2024-11-08 10:49 浏览次数:

  u8国际,u8国际官方网站,u8国际网站最新,u8国际网站,u8国际网址,u8国际链接

u8国际-u8国际官方网站-u8国际网址最新震惊!C 语言字符串处理有很多坑?

  上述这些函数没有一个是安全的操作,而且很容易产生未定义的行为。根源在于使用 \0 作为空终止符。对于上述 C 函数以及其他函数,C 希望找到一个 \0,然后告诉函数停止读取字符串所在的内存区域。但是如果没有空终止符呢?在字符串应该结束后,C 会继续读取内存中的内容。如果我们的程序函数需要验证用户提供的密码,那么不法分子可能会利用字符串的缓冲区溢出,跳过检查密码的内存区域,直接调用获取密码的函数。这样就可以避开授权。

  答案是目标字符串会被源字符串的所有字符填满,没有空间留给空终止符。一个没有非 null 终止的字符串势必会引发各种令你头疼的问题。你可能会说,但至少它可以处理源字符串小于目标字符串的情况。是吗?没错,它确实可以处理这种情况,但 strcpy 也可以。如果源字符串的长度小于目标字符串,那么目标字符串中所有未使用的额外空间仍将保留,而且会被填充。因此,假设目标字符串的长度为 20 个字符,但源字符串只有 13 个字符,那么实际上你得到的是一个像下面这样的目标字符串。

  至此,你可能已经注意到我花了很多时间谈论 strcpy,而 strcmp 和 strlen 只是一笔带过。实际上,这两个函数也会遇到由于 C 的字符串终止方式引发的相同问题。由于字符串的长度在遇到空终止符之前是未知的,所以你会遇到各种未定义的行为和攻击向量。这与 C++ 形成了鲜明的对比,C++ 将字符串视为对象,并将字符串的长度和字符数保存到了一起。这就是人们倾向于用 C++ 编写 C 的原因之一。

  怎么反斜杠(“ \ ”)变成了“ ¥ ”?但如果这样可以显示日文的话,我也可以接受。我将一个测试文件夹命名为“有り难う”,以确保 PowerShell 能够正确显示文件名。下面,我们来看一看这个文件夹,我们看到文件名可以正常显示。但即使这样修改代码,输出结果依然无法显示汉字字符!我尝试将语言环境设置为 ja_JP.UTF8,但仍然无法输出日文。继续上网搜索,我看到一篇文章讨论如何在 Windows Server 20222 上 PowerShell 控制台中显示中文、日文以及韩文的文章,其中指出:

  在本文中,我们探讨的 C 语言字符串相关知识只不过是一些皮毛,我们甚至没有提及 C11 中引入的 Unicode 文字,例如“ u8 ”、“ u ”和“ U ”。毋庸置疑,在使用 C 字符串时必须小心,否则你就会因为各种的未定义行为而感到头疼。另一方面,你的代码还会受到不法分子的攻击。如果你只有使用垃圾收集编程语言的经验,那么要仔细想一想是否有必要大费周折学习 C 语言。Python 这类语言提供了很多数据科学领域使用的库,其中大部分建立在 C 和 C++ 之上。当然这些库也必须有人去编写,如果你有这方面的知识,几乎所有语言都有一个 C 外部函数接口,可以用来提高代码的运行速度,所以其他语言也能受惠。所以,我们都应该学习一下 C 语言,但也许不应该从字符串开始学习。

联系方式

全国服务热线

@HASHKFK

手 机:@HASHKFK

地 址:广东省广州市番禺经济开发区

扫一扫,加微信

Copyright © 2002-2024 u8国际电动伸缩门有限公司 版权所有 非商用版本 备案号: