对于没有空字符的字符串,如何计算 strlen?

2023-11-30

此代码返回 n=11,第 10 个和第 11 个字符为 ' ' 和 '@' 这是如何运作的? strlen函数如何将其视为11个字符?在某些编译器中似乎将字符串长度视为 12 个字符。

#include <stdio.h>
#include <string.h>

void fun(char *arr)
{
   int i;
   unsigned int n = strlen(arr);
   printf("n = %d\n", n);
   for (i=0; i<n; i++)
     printf("%c  ", arr[i]);
}

int main()
{
   char arr[] = {'g', 'e', 'e', 'k', 's', 'q', 'u', 'i', 'z'};
   fun(arr);
   return 0;
}

根据标准,由于您的“字符串”没有空终止符,因此这不是字符串。呼唤strlen除字符串之外的任何内容都是未定义的行为,因此任何事情都可能发生,包括您正在观察的情况。

如果您想知道这是如何发生的,这可能是因为strlen不断尝试找到空终止符,偶尔会在内存中的某个位置找到它arr.

请注意,如果无法“足够快”地找到空终止符,则此代码甚至可能出现段错误。

您可以使用类似的工具valgrind检测此类内存访问违规。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于没有空字符的字符串,如何计算 strlen? 的相关文章

随机推荐

  • Yocto 中支持 PHP 的 Apache2

    我正在使用 Yocto 创建一个包含 apache2 的构建 但我很难添加 php 支持 我之前运行过它 阅读 去年 但从那时起 meta openembedded 中的meta webserver 层发生了变化 来自元网络服务器中的自述文
  • 将外部 javascript 导入到 google apps 脚本 [重复]

    这个问题在这里已经有答案了 我正在尝试从 Google 电子表格 Google 文档 使用 Trello 但不确定如何导入 引用 链接使用其库所需的 javascript 文件 我唯一的其他选择是直接使用他们的 REST API 很好 但我
  • 如何在Tensorflow中将字符串张量转换为Python字符串?

    以下代码是批量数据提供程序 mat文件 但运行时出现以下问题 TypeError expected str bytes or os PathLike object not FIFOQueue 代码是 import numpy as np i
  • 强制绑定DataGridView生成列和行

    我以编程方式创建一个 DataGridView 对象 然后使用网格的 DataSource 属性将其绑定到 DataTable 创建网格后 我将其添加到 WinForms 的控件集合中 即 Form1 Controls Add grid 我
  • 银行式导航限制

    某些网络应用程序 尤其是银行网站 会阻止您使用浏览器的导航按钮 在新选项卡中打开链接甚至刷新页面 通常他们会警告您不要这样做 甚至终止会话 迫使您再次登录 他们是否遵循特定的架构模式来实现这一目标 他们的目标是什么 这如何提高安全性 他们可
  • 桌面 SWING 应用程序上的 jpa

    我正在使用 SWING 开发一个单用户桌面应用程序 我对这种使用 java sql api 的应用程序有一点经验 并发现它一点也不舒服 在我的新应用程序中 我第一次尝试使用 JPA 我阅读了很多教程 这些教程使我几乎了解了我需要的所有内容
  • 无法启用spring框架的日志记录

    我想在Spring框架和Spring Security中配置日志记录 然后按照这个http docs spring io spring docs 3 2 x spring framework reference html overview
  • 自动布局以编程方式修改约束乘数

    如何以编程方式修改约束乘数 我设置了以下内容 self view addConstraint NSLayoutConstraint constraintWithItem button attribute NSLayoutAttributeW
  • 如何使用VC++更改桌面背景

    我目前正在尝试使用 SystemParametersInfo 更改桌面背景 当我输入我的内容时 vs 不会给我任何错误 但是当我运行程序时 我收到带有黄色三角形的警告 它说 KernelBase dll 抛出了某种异常 然后它说某些 PDB
  • 如何使用检测打印 Java 运行时调用的所有方法?

    我想打印出在运行时调用的所有方法 它们应该按照调用的顺序打印出来 如果多次调用它们 则应该打印多次 这可用于逆向工程 查看当您按下按钮或执行特定操作时调用哪些函数 我想为此使用 Java 代理和仪器 这可以使用 Java 代理和检测库来完成
  • 在 vbscript 中逐字节读取文件

    我正在寻找一种使用 VBScript 大 1 GB 读取大二进制文件的方法 我无法直接读取它ReadAll因为文件太大 所以我正在寻找一种在循环中读取它的方法 就像在 C 中一样 所以我想读取 X 个字节 处理它们 我不需要完整的文件来完成
  • MySQL单语句合并两个表

    我确信这个问题已经被问过 回答了 但我不知道这种操作是如何调用的 而且我的 SQL 知识是有限的 我正在寻找一个 SQL 语句来合并两个表 表用户 ID hash 1 abc 2 def 3 ghi 和 USER FIELD 表 ID us
  • 我可以阻止 iPhone OS 3.x 应用程序在 2.x 操作系统上运行吗?

    我不希望我的应用程序在运行 3 0 之前的任何操作系统的 iPhone 或 iPod 上运行 我的印象是应用程序商店会帮我处理这个问题 但我认为事实并非如此 提醒用户然后退出的最佳方法是什么 最好是 我希望在用户购买我的应用程序之前发生这种
  • 从 firebase 中的数组获取值[重复]

    这个问题在这里已经有答案了 我想从数组字段中获取值 但我收到一个错误 没有为类型 Object 定义运算符 文档 尝试定义运算符 from this codevar followSitesList value data followedSi
  • 部署在 apache 服务器上的 Dash 失败并显示“Dash 对象不可调用”

    我正在尝试将 python dash 应用程序部署到我的 apache 服务器 我遵循了我能找到的有关此配置的少量信息 官方文档 这个故障排除线程好一点 当我访问该网站时 页面返回一个500 Internal Server Error 被描
  • 将配置参数保存到存储库

    我刚刚开始使用 git ftp 它允许我将提交推送到 FTP 服务器 FTP 凭据以这种方式存储在 git config 中 git ftp user myusername url ftp myserver com httpdocs pas
  • 使用 MailGun 快速发送电子邮件

    Problem 我想使用MailGun从纯 Swift 应用程序发送电子邮件的服务 迄今为止的研究 据我了解 有两种发送电子邮件的方法通过邮件枪 一种是向 MailGun 发送电子邮件 MailGun 将重定向它 请参阅通过 SMTP 发送
  • Mongodb:在 find() 中使用 $or 时返回匹配的过滤器

    假设我在 Mongodb 中进行这样的查询 db user find or field1 abc field2 def field3 ghi 并且返回了一些文件 了解三个过滤器中的哪一个 或多个 与返回的每个文档匹配的最简单方法是什么 通过
  • 如何点击整个vuejs组件

    我有组件 我想点击后运行方法
  • 对于没有空字符的字符串,如何计算 strlen?

    此代码返回 n 11 第 10 个和第 11 个字符为 和 这是如何运作的 strlen函数如何将其视为11个字符 在某些编译器中似乎将字符串长度视为 12 个字符 include