【问题标题】:How to store value referenced with pointers in variables?如何将指针引用的值存储在变量中?
【发布时间】:2021-11-06 20:29:25
【问题描述】:

其实我有一个这样的字符串:"1,22,333,,55555,666666,7777777"

从这个字符串我创建了两个数组:

  • 一个与每个参数的大小。对于给定的示例,它看起来像这样:[1;2;3;0;5;6;7]
  • 第二个带有引用每个参数开头的指针。 对于给定的示例,它看起来像这样:
    ["1,22,333,,55555,666666,7777777";
    "22,333,,55555,666666,7777777";
    "333,,55555,666666,7777777";
    ",55555,666666,7777777";
    "55555,666666,7777777";
    "666666,7777777";
    "7777777"]

参数的长度和类型可以改变,但不能按顺序改变。 所以我想用类型转换来存储它们以供相关人员使用

我已经测试了sscanf指针数组的每个索引,但它似乎不起作用

char* format = strcat(strcat("%", params_sizes[0]), "u");
strutest.un = sscanf(params_pointer[0], format);

你有什么想法可以帮到我吗?

【问题讨论】:

  • 对我来说,不清楚您要做什么。 “所以我想将它们与相关人员的类型转换一起存储”是什么意思
  • "...但它似乎不起作用" 好吧,好吧但是...请描述发生了什么问题
  • "参数可以在 [...] in type 中更改" - 什么? type 对你来说意味着什么?
  • 我有一个不同类型的参数结构(float、uint8_t、uint32_t、int16_t、char[]),我想用我拥有的值相应地填充这些参数。
  • 据我所知,我想用特定的 scanf 格式扫描指针的值的大小,我必须创建它并且不想创建它

标签: arrays c pointers casting scanf


【解决方案1】:

这一行

char* format = strcat(strcat("%", params_sizes[0]), "u");

错了。

strcat 的原型是

char *strcat(char *restrict dest, const char *restrict src);

其中dest目的地,即(指向)存储连接字符串的对象。

所以看看你的代码:

strcat("%", params_sizes[0]
       ^^^
       dest !!!

您正在尝试将结果存储在字符串文字中。那是行不通的(在未定义的行为中修改字符串文字)。

你需要这样的东西:

char format[1024] = "%";  // Sufficiently big char array that can be modified

strcat(strcat(format, params_sizes[0]), "u");

顺便说一句:还要考虑 sprintf 而不是嵌套的 strcat

【讨论】:

    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2021-03-18
    • 2021-06-25
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    相关资源
    最近更新 更多