开发了 strtok 替代品

2024-01-23

我开发了自己的 strtok 版本。只是为了练习指针的使用。

任何人都可以看到这有任何限制,或者无论如何我可以改进。

void stvstrtok(const char *source, char *dest, const char token) 
{
    /* Search for the token. */
    int i = 0;
    while(*source)
    {
        *dest++ = *source++;
        if(*source == token)
        {
            source++;
        }
    }
    *dest++ = '\0';
    }

int main(void)
{
    char *long_name = "dog,sat ,on ,the,rug,in ,front,of,the,fire";
    char buffer[sizeof(long_name)/sizeof(*long_name)];

    stvstrtok(long_name, buffer, ',');

    printf("buffer: %s\n", buffer);

   getchar();

   return 0;
}

旁注:“令牌”一词通常用于描述返回的字符串部分。分隔符用于描述分隔标记的东西。因此,为了使代码更清晰,您应该将 token 重命名为 delimiter,并将 dest 重命名为 token_dest。

您的函数和 strtok 的差异:

您的函数和 strtok 之间存在一些差异。

  • 您的函数所做的只是删除令牌分隔符
  • 您只需调用一次函数即可处理字符串的所有部分。使用 strtok,您可以对字符串的每个部分多次调用它(后续多次使用 NULL 作为第一个参数)。
  • strtok 还会破坏源字符串,而您的代码使用自己的缓冲区(我认为最好像您一样使用您自己的缓冲区)。
  • strtok 在每次调用后存储下一个标记的位置,其中第一个参数为 NULL。该位置随后用于后续调用。但这不是线程安全的,并且您的函数将是线程安全的。
  • strtok 可以使用多个不同的分隔符,而您的代码仅使用一个。

话虽这么说,我将给出如何制作更好的函数的建议,而不是更接近 strtok 实现的函数。

如何改进你的功能(不是模仿strtok):

我认为最好进行以下更改:

  • 让您的函数仅返回“下一个”标记
  • 当您有 *source 或 *source == 分隔符时跳出循环
  • 返回指向包含下一个标记的源字符串的第一个字符的指针。该指针可用于后续调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开发了 strtok 替代品 的相关文章

  • CMake 找不到请求的 Boost 库

    既然我已经浏览了其他人的解决方案几个小时 但找不到适合我的问题的正确答案 我想将我的具体问题带给您 我正在尝试使用 CMake 构建 vsomeip 为此 我之前构建了 boost 1 55 但是 我在 CMake 中收到以下错误 The
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • 在路由mvc 4中添加公司名称

    我一直在尝试为 Facebook 等用户提供在 URL 中添加公司名称的选项 http localhost 50753 MyCompany Login 我尝试过不同的网址 但没有成功 routes MapRoute name Default
  • 在 Java 中创建 T 的新实例

    在C 中 我们可以定义一个泛型class A
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • CSharpRepl emacs 集成?

    我碰巧知道莫诺CSharpRepl http www mono project com CsharpRepl 是否有 emacs csharp 模式使用它在一个窗口中运行 REPL 并像 python 模式一样在另一个窗口中编译 运行 C
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • C# 开源 NMEA 解析器 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 C 开源 NMEA 解析器 嗯 我自己也不熟悉 但是一些快速搜索显示了一个代码项目 htt
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 如何使用 NPOI 按地址(A1、A2)获取 Excel 单元格值

    我有一个 Excel 单元格地址 例如 A1 A2 如何使用 C 中的 NPOI 框架以编程方式访问此单元格 我找到的一些 Java POI 示例代码 CellReference cr new CellReference A1 row my
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t

随机推荐

  • Spark RDD 块在使用前被移除

    我正在使用 Future 对 RDD 执行阻塞操作 如下所示 dStreams foreach foreachRDD rdd gt Future writeRDD rdd 有时我会收到此错误 org apache spark SparkEx
  • Delphi IAccessible Get_accState 影响 Get_accName?

    我目前正在将 IAccessible Interface 添加到派生的 VCL 组件中 以便能够为我的应用程序实现自动化 UI 测试 实现接口后 我没有看到通过外部工具读出的组件属性中的名称 尽管我在调试时看到它已设置 经过 一些 或更可能
  • 在 ARCore 中添加的垂直平面上的对象始终旋转

    我正在 Sceneform ARFragment 中的垂直平面上添加图像 但它总是会旋转 该代码在水平面上运行良好 我将图像放置在垂直平面上的代码如下 arFragment setOnTapArPlaneListener hitResult
  • PHP 中的类模板就像 C++ 中的一样

    可以在中创建类模板PHP as in C PHP可能没有类似的语言结构 比如template中的关键词C 但也许有一些巧妙的技巧可以实现类似的功能 我有一个Point我想将其转换为模板的类 在类中 我使用类型参数 因此 对于每个类 我想传递
  • PHP 启动:无法加载动态库 'C:\xampp\php\ext\php_oci8_12c.dll' - 找不到指定的程序

    我们在php中连接oracle服务器面临一个大问题 我做了什么 Setp 1 安装 Windows 7 32 位 第2步 安装 XAMPP 32 包括 Apache 2 4 29 PHP 7 1 11 phpMyAdmin 4 7 4 Op
  • C++0x |为什么 std::atomic 使用 volatile 限定符重载每个方法?

    以下摘录自当前草案 说明了我的意思 namespace std typedef struct atomic bool bool is lock free const volatile bool is lock free const void
  • 使用 ExecuteNonQuery() 时返回值不正确

    我正在编写一个与 SQL Server 交互的 C 程序 我愚蠢地将查询字符串硬编码到 C 程序中 并希望将它们转换为服务器上的存储过程 由于某种原因 一个特定的 INSERT 语句 工作正常 不再有效 我不明白为什么 我什至运行了 SQL
  • 如何从十进制字符串中去掉零和小数点?

    当前输出以下代码 12 1 12 100 12 1000 12 00 12 12 0000 我怎样才能改变它 让它输出 12 1 12 1 12 1 12 12 12 Math Round 似乎就是这样 但它让我定义了我想要的小数位数 但我
  • Android java 百分比位图两幅图像之间的像素差异

    我需要在Android上的java中计算两个图像之间的像素差异 问题是我的代码返回不准确的结果 例如 我有 3 张非常相似的图片 但对于每张图片的比较 它返回显着不同的结果 pic1 vs pic2 1 71 pic1 与 pic3 0 0
  • 如何使用 Prisma 加密和解密数据?

    我已经研究了几周并寻找解决方案 但找不到针对我的具体问题的解决方案 我的前提 我使用NodeJS作为后端服务器 我通过Prisma管理数据 https www prisma io https www prisma io 我的客户要求对数据库
  • 识别标记并获取与其关联的对象的典型方法是什么?

    我在我的一个应用程序中使用地图 我想知道在点击标记时获取标记的关联对象的常见 有效方法是什么 我今天的计划是这样的 首先 我使用返回的标记创建对象的 ArrayList 和这些对象的 HashMapmMap addMarker 作为索引 A
  • 如何设置NSMenu/NSMenuItems的字体?

    我不知道如何在 NSMenu 中设置 NSMenuItems 的字体 样式 我在 NSMenu 上尝试了 setFont 方法 但它似乎对菜单项没有任何影响 NSMenuItem 似乎没有 setFont 方法 我希望它们都具有相同的字体
  • CSS 动画,单击时切换旋转

    我尝试让下面的插入符号在单击下拉菜单时旋转 180 度 在我尝试实现的解决方案中 它将插入符的类更改为单击时向上切换或向下切换 我第一次点击它时它会向上旋转 第二次它会立即返回到起始位置 然后再向上旋转 我闻到了脏代码的味道 添加此切换旋转
  • 在 ConstraintValidator 中注入服务 [Bean Validator - JSR 303] Spring

    下午好 我在 Bean Validator JSR 303 中注入服务时遇到问题 我将执行验证 但我需要验证数据库中的此记录 当我使用我的服务时 它抛出 NullPointerException 例外 Exception in thread
  • Ruby、RSVG 和 PNG 流

    我正在尝试在 Rails 应用程序中将图像从 SVG 转换为 PNG ImageMagick 不适合我 因为 Heroku 此时无法 想要升级 IM 我正在测试在开发中使用 RSVG2 Cairo 的一些想法 但遇到了障碍 我可以轻松地将
  • 将 ÆØÅ 等特殊字符读入 R (Rstudio)

    我正在尝试读取包含用挪威语编写的调查问卷数据的 CSV 文件 所以这个文件包含字母 但是 R 似乎不能很好地处理这些字母 它们都显示为问号 我用它来读取数据 data lt read csv2 Responser Vasket 20 06
  • 当我在 Visual Studio 2005 中保存文件时是否可以运行宏?

    当我在 Visual Studio 2005 中保存文件时 我希望还运行一个更新版权的宏 通过正则表达式搜索和替换 我对正则表达式并不陌生 但对 VB VBA 和 Visual Studio 宏很陌生 所以我具体需要帮助的是 让宏在保存时运
  • Java,具有同步方法的多线程

    有时我在让我的程序不陷入僵局时遇到一些麻烦 我想我需要添加第三个同步方法release 它可用于在调用ping后释放另一个线程 代码如下 Attempt at a simple handshake Girl pings Boy gets c
  • Angular - 模块没有导出成员“OpaqueToken”错误

    我应该如何解决这个错误 node modules ngrx store src ng2 d ts 1 10 中的错误 错误 TS2305 模块 C Users sandr Desktop wz r kopia node modules an
  • 开发了 strtok 替代品

    我开发了自己的 strtok 版本 只是为了练习指针的使用 任何人都可以看到这有任何限制 或者无论如何我可以改进 void stvstrtok const char source char dest const char token Sea