【问题标题】:Is sscanf compatible with dynamically allocated strings?sscanf 与动态分配的字符串兼容吗?
【发布时间】:2020-08-14 21:00:53
【问题描述】:

我编写了一个程序,它以格式化的方式从动态分配的字符串中读取数据到 2 个字符串和 1 个 int 的结构中。但是,在用 char 指针替换静态 char 数组结构字段时,程序停止工作并以超时结束。是否不可能将 sscanf() 与动态分配的数组一起使用?有什么简单的方法可以让我的程序适应动态分配的字符串?

【问题讨论】:

  • 是的,sscanf 与动态分配的字符串“兼容”。现在展示我们可以帮助您调试的实际代码。
  • 你如何分配数据并不重要,只要你分配了足够的空间来容纳输入。包括空终止符的空间。所以你的问题不是动态分配的存在引起的。
  • “在用 char 指针替换静态 char 数组结构字段时......”:我猜这些指针没有指向它们应该指向的位置。您应该至少向我们展示您更改前后的相关行,然后也许我们可以提供更多帮助。

标签: c arrays string memory-management


【解决方案1】:

我认为您正在尝试这样做

#include <stdio.h>

typedef struct {
  char *a;
  char *b;
  int c;
} s_fruit;

int main(void) {
  char str[] = "Apple Orange 2KG each.";
  s_fruit s;
  sscanf(str, "%s %s %i", s.a, s.b, &s.c);
  printf("%s\n%s\n%i", s.a, s.b, s.c);
  return 0;
}

所以你会得到一个错误,因为没有一个指针指向分配的内存,所以你可以为这些指针分配内存,或者只是这样做,例如 10 个字符的数组,包括空终止符。

#include <stdio.h>

typedef struct {
  char a[10];
  char b[10];
  int c;
} s_fruit;

int main(void) {
  char str[] = "Apple Orange 2KG each.";
  s_fruit s;
  sscanf(str, "%s %s %i", s.a, s.b, &s.c);
  printf("%s\n%s\n%i", s.a, s.b, s.c);
  return 0;
}

输出

Apple
Orange
2

注意: 这只是一个模拟,我不知道你写了什么,但我只是猜想你可能做了类似的事情,快乐的编码!

【讨论】:

  • 谢谢!事实证明,这个问题实际上是微不足道的——我忘记了从表切换到指针后,我还必须为它们分配内存,而我以前只为我的临时文本数组这样做。无论如何感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
相关资源
最近更新 更多