Как сделать динамическую c строку?
Прочтите внимательно такую книгу, как Modern C , затем обратитесь на хороший C справочный сайт . Прочтите документацию вашего C компилятора (возможно, G CC) и отладчика (возможно, GDB ). Конечно, внимательно прочтите документацию по каждой функции (например, scanf
), которую вы используете.
while(c != '.'){
scanf("%c", c);
cad[i] = c;
i++;
cad = realloc(cad, (i + 1)*sizeof(char));
}
Ваш код выше и неверен, и неэффективен.
Это неправильно, поскольку вы используете scanf (ошибочно: должно быть scanf("%c", &c)
, но вы действительно хотите использовать getchar ) и reallo c, но не обрабатывать их случай отказа
Это неэффективно, потому что вы, вероятно, не захотите перераспределять строку через каждые l oop. Если у вас очень мало памяти (на практике маловероятно), вам следует подумать об использовании realloc
только время от времени (поскольку realloc
, вероятно, является дорогостоящей операцией). Например, вы можете сначала malloc
буфер размером 128 байт, а realloc
- только при необходимости (когда вы прочитали 127 байт), например, newsize = 3 * oldsize / 2 (так что второй раз до 192 байтов и т. Д.) 1049 * ...)
И если вы скомпилировали все предупреждения и отладочную информацию (например, gcc -Wall -Wextra -g
), вы получите полезные предупреждения.