Динамически читать строку из ввода в C - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь прочитать значение пользователя и сохранить его в виде строки.Строка должна содержать все символы перед запятой или концом строки, и она должна выводить либо запятую, либо EOF.

Я пытаюсь прочитать каждый символ и выделить место в строке по мере необходимости, но файл останавливается после прочтения первого ввода.

Это то, что я до сих пор:

char read_data(char** str) {
  char c = 'n';
  int size = sizeof(**str);

  int i = 0;
  while (((c = getchar()) != COMMA) && (c != NEWLINE)) {
    size += sizeof(c);

    *str = (char*) realloc(*str, size + 1);
    assert(*str);

    *str[i] = c;
    i++;

  }

  *str[i] = '\0'; //terminator
  return c;
}

int main(int argc, char const *argv[]) {
  char* string = NULL;
  char left;
  left = read_data(&string);
  printf("left: %c\n", left);
  printf("string: %s\n", string);

  free(string);
  return 0;
}

Я не могу понять, почему он ломается.У кого-нибудь были бы какие-нибудь советы / идеи ..?

1 Ответ

0 голосов
/ 27 августа 2018

Поскольку подписка массива ([]) имеет более высокий приоритет, чем косвенное (*) , когда вы пишете *str[i], вы получаете *(str[i]) - первый символ i th строка.Однако вы хотели (*str)[i].

Вот четыре способа написать то, что вы имеете в виду, каждый из которых означает « i -й символ строки *str»:

(*str)[i]
str[0][i]
i[*str]
*(*str+i)
...