使用 strtok 在 C 中解析字符串

2024-04-12

我有这个小源代码,用于测试类似于变量的字符串的解析string我需要在其他项目中使用

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


int main (void)
{
    char string[] = "C-AC-2C-3C-BOB";
    char* s;
    char* hand[3];
    char* usr;


    s = (char*) calloc(1, sizeof(char));
    hand[1] = (char*) calloc(3, sizeof(char));
    hand[2] = (char*) calloc(3, sizeof(char));
    hand[3] = (char*) calloc(3, sizeof(char));
    usr = (char*) calloc(21, sizeof(char));

    s = strtok (string,"-");
    hand[1] = strtok (NULL, "-");
    hand[2] = strtok (NULL, "-");
    hand[3] = strtok (NULL, "-");
    usr = strtok (NULL, "\0");

    printf("%s:%s:%s:%s:%s\n", s, hand[1], hand[2], hand[3], usr);

    return 0;
}

问题是我得到了这些3C:AC:2C:3C:BOB作为 printf 的结果而不是C:AC:2C:3C:BOB.

- - - -编辑 - - -

无内存泄漏的代码。问题依然存在

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


int main (void)
{
    char string[] = "C-AC-2C-3C-BOB";
    char* s;
    char* hand[3];
    char* usr;

    s = strtok (string,"-");
    hand[1] = strtok (NULL, "-");
    hand[2] = strtok (NULL, "-");
    hand[3] = strtok (NULL, "-");
    usr = strtok (NULL, "\0");

    printf("%s:%s:%s:%s:%s\n", s, hand[1], hand[2], hand[3], usr);

    return 0;
}

你声明一个数组hand因为有三个条目,那么您可以使用索引对其进行索引1通过3。但是 C 中的数组有来自以下位置的索引:0 to size-1 (e.g. 2在你的情况下)。

因此,您在数组范围外写入/读取,从而导致未定义的行为。

将数组的索引更改为0通过2它应该工作正常。

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

使用 strtok 在 C 中解析字符串 的相关文章

随机推荐

  • 如何将 rustc 标志传递给货物?

    我正在尝试禁用死代码警告 我尝试了以下方法 cargo build A dead code rla git master 货物构建 A dead code 错误 参数无效 所以我想知道如何将 rustc 参数传递给 Cargo 您可以通过几
  • 如何根据两个值对列表进行排序

    我有一个列表 我想根据两个值日期和状态进行排序 如下所示 pollsList sort a b gt b active compareTo a active pollsList sort a b return b actualStartDa
  • AnimationTimer 是否在自己的线程中运行?

    JavaFX 是否有AnimationTimer启动时在单独的线程上运行 我在调试器中运行了一个 JavaFX 应用程序 有或没有AnimationTimer 并且在这两种情况下都有 6 个线程在运行 另外 JavaDocs 没有提到它的实
  • 正则表达式在句点后添加空格,但当句点表示小数或字母缩写时不添加空格?

    以简单的方式使用 php regexp 是否可以修改字符串以在单词后面的句点之后添加空格 但不能在前后有数字 例如 1 00 的句点之后添加空格 我还需要它来忽略单字母缩写 例如 N Y String Looks like this Wit
  • Java非常大的堆大小[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有人有在 Java 中使用非常大的堆 12 GB 或更大 的经验吗 GC 是否会使程序无法使用 您使用什么 GC 参数 Sun 或 B
  • plantUML:泳道和重叠连接器

    我正在使用 plantUML 泳道来可视化内部流程 但不幸的是 当我想要显示已执行和分离的流程时遇到重叠线 我正在使用这个 startuml title something dee4e8 p1 c4c9cd p2 daf0fe Backen
  • 如何在空手道中运行单个场景?

    为了测试空手道的特定功能 我运行 mvn test Dkarate options classpath myfeature feature 有没有办法运行定义到功能中的单个场景 是的 您可以通过标签 https github com int
  • 仅获取用户媒体(照片) - Twitter API

    使用 Twitter API V1 1 是否可以检索用户发布的照片 我可以看到 执行此操作的一种方法是拉动用户的时间线include entities true并以这种方式搜索照片 但这似乎是一种极其麻烦的方法 而且容易出现问题 例如 我们
  • 如何在项目中实现预编译头

    我了解预编译头背后的目的和推理 然而 实施时有哪些规则呢 根据我的理解 事情是这样的 将您的项目设置为使用带有 YU 指令的预编译头 创建 stdafx h 文件并将其设置为预编译头 将此作为每个 h 文件中的顶部包含语句 这是正确的吗 您
  • 如何确认邮件已送达或未送达?

    下面是我的代码 大家看一下 System Net Mail MailMessage oMail new System Net Mail MailMessage System Net Mail SmtpClient smtp new Syst
  • 阶乘的最低有效非零数字

    我正在尝试计算阶乘中最低有效的非零数字 我有以下片段 document ready function submit click function var n number val get result n function get resu
  • PHP .htaccess -> 漂亮的 url(相反)

    我知道如何进行 URL 重写 例如 www example com index php id 1 cat 3 to www example com 1 3 管他呢 我知道 我不知道到底如何更改所有页面中的整个链接以链接到漂亮的 URL 我网
  • Angular 2 RxJS Observable:重试,429 状态除外

    我已经编写了 Observable 来自 HTTP 请求 以在失败时重试 不过 我想not如果服务器响应为重试429 Too many requests error 无论如何 当前的实现都会重试两次 间隔 1 秒 return this h
  • Xdebug 错误的 Zend API 版本号

    我在升级 MAMP 的 xdebug 时遇到问题 我运行的是 2 2 0 版本 遇到了一个已知问题 PhpStorm 和 Xdebug 在 Symfony2 控制器中没有中断 https stackoverflow com question
  • 如何在量角器中重新运行失败的黄瓜场景?

    作为测试的一部分 我使用打字稿语言来开发与量角器兼容的代码 我使用 BDD 框架 其中我在 config ts 中定义了一些黄瓜选项 如下所示 capabilities specs example feature cucumberOpts
  • 我应该如何使用 Outlook 发送代码片段?

    作为一家大公司的程序员 我经常发送包含代码示例的 Outlook 电子邮件 实际上 我会直接在电子邮件中输入代码 这不可避免地会导致问题 因为 Outlook 确实喜欢以令人愉悦但无益的方式设置文本格式 我的代码需要可以从电子邮件中复制出来
  • 快速显示图像UIImageview

    如何在 UIImageview 中显示图像 然后根据按下的按钮更改图像 我很新 请放轻松 为此 首先确保视图控制器中具有可用的图像 通过在故事板上的图像和视图控制器中创建图像之间的关联 我们假设它名为 imageView 通过编程 您可以说
  • 鼠标悬停控件并显示其手柄

    我知道 我可以编写一个函数作为表单中每个组件的事件来执行某些操作 例如 当鼠标悬停时 是否也可以在不将事件链接到特定组件的情况下调用事件函数 而是为应用程序中的所有组件调用事件函数 我想要实现的是显示例如只需将鼠标悬停在任何组件上即可获取句
  • 如何在 VS Code 中调试 Flask 应用程序

    我一直在尝试让调试器在 VS Code 中工作 以便我可以调试我的 Flask 应用程序 我已经尝试了很多选择launch json我觉得已经没有了 以下示例不起作用 https github com DonJayamanne python
  • 使用 strtok 在 C 中解析字符串

    我有这个小源代码 用于测试类似于变量的字符串的解析string我需要在其他项目中使用 include