【问题标题】:How to modify my pointer value in this exemple? [duplicate]在这个例子中如何修改我的指针值? [复制]
【发布时间】:2021-11-10 16:50:03
【问题描述】:

我试图沿着我的 char 数组(一个字符串)移动我的 char 指针,它不起作用,我不明白为什么。

我的 char 数组看起来像这样 "5,true,-12,..."

这是我的代码:

local_length = get_param_length(jump_next_param(param));
  • local length 是参数的长度(不带逗号)
  • param 是我要解析的字符串

以我给出的示例为例,在我写的行之前,local_length = 1(5 长度)。 在我写的那一行之后,local_length = 4(真实长度)。

但参数仍然指向 5,我希望它指向 t

这里是 jump_next_param() 的代码:

static char* jump_next_param(char *param){
    uint32_t jump_length = get_param_length(param);
    param += jump_length + 1;
return param;}

【问题讨论】:

  • 需要更多上下文。
  • "param 仍然指向 5" 没有演示。发布minimal reproducible example
  • 在 C 中,所有参数都通过复制值传递给函数。离开该功能后,将看不到任何内容。
  • 在你的函数中使用char **param并更新*param

标签: c string parsing pointers


【解决方案1】:

你真正遇到的是一个 XY 问题。您需要帮助从逗号分隔的列表中解析单个项目。如果您不必担心包含逗号的引号括起来的字符串,您可以使用strchr

char *list = "first,second,third,fourth,fifth";
char *p = list;
char *q = list;

do
{
    p = strchr(q, ',');
    printf("%.*s\n", (ptrdiff_t)(p - q), q);
    q = p;
    p++, q++;
}
while (p != NULL);

【讨论】:

    猜你喜欢
    • 2017-02-25
    • 2017-02-21
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2019-01-12
    相关资源
    最近更新 更多