Во-первых, строка C - это не просто char
, а массив char
с последним элементом (или, по крайней мере, последним, который считается частью строки) с нулевым символом (численно *).1003 *, также '\ 0' как символьная константа).
Далее, в коде, который вы разместили, вы, вероятно, имели в виду char buffer[50]
, а не char *buffer[50]
... у вас есть версия массива 50 char *
с, но вам нужен массив 50 char
s.После того, как это будет исправлено, тогда ...
Поскольку fgets()
всегда заполняет нулевой символ в конце прочитанной строки, buffer
уже будет допустимой строкой C после вызова fgets()
.Если вы хотите скопировать ее в другую строку, чтобы можно было повторно использовать буфер для чтения дополнительных входных данных, вы можете использовать обычные функции обработки строк из <string.h>
, например strcpy()
.Просто убедитесь, что строка, в которую вы копируете ее, достаточно велика, чтобы вместить все используемые символы плюс завершающий нулевой символ.
Этот код копирует строку в новую malloc()
ed строку (проверка ошибок опущена):
char buffer[50];
char *str;
fgets(buffer,50,stdin);
str = malloc(strlen(buffer) + 1);
strcpy(str,buffer);
Этот код делает то же самое, но копирует в массив char
в стеке (не malloc()
ed):
char buffer[50];
char str[50];
fgets(buffer,50,stdin);
strcpy(str,buffer);
strlen()
скажет вам, сколькосимволы используются в строке, но не учитывают завершающий ноль (поэтому вам нужно выделить еще один символ, чем то, что возвращает strlen()
).strcpy()
скопирует символы и ноль в конце из одной строки / буфера в другую.Он останавливается после нуля и не знает, сколько места вы выделили - поэтому вам нужно убедиться, что он найдет нулевой символ, прежде чем закончится свободное место в месте назначения или достигнет конца исходного буфера.Если вы сомневаетесь, поместите нулевое значение в конец буфера самостоятельно, чтобы убедиться.