使用strsep在C语言中解析字符串(替代方法)

凯罗尔

我想解析一个字符串,并且使用strsep函数:

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

int main()
{

  char str[] = "Marco:Q:2F7PKC";
  char *token1, *token2, *token3;
  char *r = malloc(30);

  strcpy(r, str);

  token1 = strsep(&r, ":");
  token2 = strsep(&r, ":");
  token3 = strsep(&r, ":");

  printf("tok1 = %s\n", token1);
  printf("tok2 = %s\n", token2);
  printf("tok3 = %s\n", token3);

  free(r);

  return 0;

}

该函数可以很好地完成工作,但是如果我启动valgrind,分配的字符串将char * r无法正确释放(肯定会丢失:1个块中有30个字节)。

我想知道为什么以及是否有其他方法可以做同样的事情,也许不需要调用strsep

我打电话给valgrind valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./a.out

弗雷德·富

strsep覆盖其第一个(指针到指针)参数的目标,因此您将丢失指向malloc“ d缓冲区”基址的指针实际上,如果确实printf("%p\n", r);在之前放置了free,则您将发现释放的空指针无效。

一种简单的解决方案是引入一个额外的变量,以free在完成操作后保留该指针习惯用法是

char *r = strdup("Marco:Q:3F7PKC");
// check for errors

char *tok = r, *end = r;
while (tok != NULL) {
    strsep(&end, ":");
    puts(tok);
    tok = end;
}

free(r);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用C语言中的“ sscanf”函数解析字符串中的子字符串

来自分类Dev

在C语言中将“字符串”拆分为字符

来自分类Dev

在C语言中,如何找到字符串中的'\'字符?

来自分类Dev

关于C语言中的printf格式字符串

来自分类Dev

在C语言中为指针分配字符串

来自分类Dev

C语言中“字符串”的通用交换

来自分类Dev

关于C语言中的数组和字符串的困惑

来自分类Dev

递归C语言中的字符串计算器

来自分类Dev

在C语言中传递空字符串(“”)是否不好?

来自分类Dev

C语言中的字符串矩阵(类似于Matlab)

来自分类Dev

C语言中的Quicksort字符串数组

来自分类Dev

比较C语言中的字符串数组

来自分类Dev

C语言中的字符串操作:这可能吗?

来自分类Dev

用用户输入操作C语言中的字符串

来自分类Dev

递归C语言中的字符串计算器

来自分类Dev

为什么在C语言中“字符串”被视为“常量”?

来自分类Dev

C语言中的结构和字符串

来自分类Dev

在C语言中使用“ fscanf”如何分割两个字符串?

来自分类Dev

如何在C语言中将字符串与结构一起使用?

来自分类Dev

我在C语言中使用递归来反转字符串的方式

来自分类Dev

使用 File IO 和 2Darray 比较 C 语言中的字符串错误

来自分类Dev

C语言中模运算的替代方法

来自分类Dev

需要帮助来解析C语言中“ var1 = bob&var2 = smith”形式的字符串

来自分类Dev

核心语言中的字符串比较

来自分类Dev

在C语言中,我该怎么做?如果我不想使用字符串函数

来自分类Dev

在字符串C语言中查找空格和字母数字字符

来自分类Dev

如何在C语言中的字符串中随机播放字符

来自分类Dev

使用类似 markdown 的标记语言递归解析字符串

来自分类Dev

使用LC-3汇编语言在单独的行上打印字符串的替代方法

Related 相关文章

  1. 1

    使用C语言中的“ sscanf”函数解析字符串中的子字符串

  2. 2

    在C语言中将“字符串”拆分为字符

  3. 3

    在C语言中,如何找到字符串中的'\'字符?

  4. 4

    关于C语言中的printf格式字符串

  5. 5

    在C语言中为指针分配字符串

  6. 6

    C语言中“字符串”的通用交换

  7. 7

    关于C语言中的数组和字符串的困惑

  8. 8

    递归C语言中的字符串计算器

  9. 9

    在C语言中传递空字符串(“”)是否不好?

  10. 10

    C语言中的字符串矩阵(类似于Matlab)

  11. 11

    C语言中的Quicksort字符串数组

  12. 12

    比较C语言中的字符串数组

  13. 13

    C语言中的字符串操作:这可能吗?

  14. 14

    用用户输入操作C语言中的字符串

  15. 15

    递归C语言中的字符串计算器

  16. 16

    为什么在C语言中“字符串”被视为“常量”?

  17. 17

    C语言中的结构和字符串

  18. 18

    在C语言中使用“ fscanf”如何分割两个字符串?

  19. 19

    如何在C语言中将字符串与结构一起使用?

  20. 20

    我在C语言中使用递归来反转字符串的方式

  21. 21

    使用 File IO 和 2Darray 比较 C 语言中的字符串错误

  22. 22

    C语言中模运算的替代方法

  23. 23

    需要帮助来解析C语言中“ var1 = bob&var2 = smith”形式的字符串

  24. 24

    核心语言中的字符串比较

  25. 25

    在C语言中,我该怎么做?如果我不想使用字符串函数

  26. 26

    在字符串C语言中查找空格和字母数字字符

  27. 27

    如何在C语言中的字符串中随机播放字符

  28. 28

    使用类似 markdown 的标记语言递归解析字符串

  29. 29

    使用LC-3汇编语言在单独的行上打印字符串的替代方法

热门标签

归档