sscanf是否与动态分配的字符串兼容?

问题描述 投票:-1回答:1

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

c arrays string memory-management
1个回答
0
投票

我认为您正在尝试这样做

#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;
}

所以您会得到一个错误,因为所有指针都没有指向已分配的内存,因此您可以这样操作:]

#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

注意

这只是模拟,我不知道您编写了什么,但我只是猜测您可能做了类似的事情,编写了满意的代码!
© www.soinside.com 2019 - 2024. All rights reserved.