Совместим ли sscanf с динамически размещаемыми строками? - PullRequest
0 голосов
/ 30 апреля 2020

Я написал программу, которая считывает данные из динамически размещенной строки в форматированном виде в структуру из 2 строк и 1 int. Однако после замены полей структуры массива stati c char указателями на символы программа перестает работать и заканчивается тайм-аут. Разве невозможно использовать sscanf () с динамически размещаемым массивом? Есть ли простой способ адаптировать мою программу к динамически размещаемым строкам?

1 Ответ

0 голосов
/ 30 апреля 2020

Я думаю, что вы пытаетесь сделать это следующим образом

#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

Примечание: Это было просто симуляция Я не знаю, что вы написали, но я только догадался, что вы, возможно, сделали что-то подобное, счастливое кодирование!

...