C: Как добавить/объединить пробелы "x" в строку
Я хочу добавить переменное число пробелов в строку в C и хотел бы знать, есть ли стандартный способ сделать это, прежде чем я сам его реализую.
До сих пор я использовал некоторые уродливые способы сделать это:
- Предположим, что до того, как я вызвал любую из нижеперечисленных функций, я позаботился о том, чтобы выделить достаточное количество памяти для пробелов, которые я хочу объединить
Это один из способов, которым я использовал:
add_spaces(char *dest, int num_of_spaces) {
int i;
for (i = 0 ; i < num_of_spaces ; i++) {
strcat(dest, " ");
}
}
Это один из лучших в производительности, но также не выглядит стандартным:
add_spaces(char *dest, int num_of_spaces) {
int i;
int len = strlen(dest);
for (i = 0 ; i < num_of_spaces ; i++) {
dest[len + i] = ' ';
}
dest[len + num_of_spaces] = '\0';
}
Итак, у вас есть стандартное решение для меня, поэтому я не изобретаю велосипед?
Ответы
Ответ 1
Я бы сделал
add_spaces(char *dest, int num_of_spaces) {
int len = strlen(dest);
memset( dest+len, ' ', num_of_spaces );
dest[len + num_of_spaces] = '\0';
}
Но, как указано в @self, функция, которая также получает максимальный размер dest (включая '\0'
в этом примере), более безопасна:
add_spaces(char *dest, int size, int num_of_spaces) {
int len = strlen(dest);
// for the check i still assume dest tto contain a valid '\0' terminated string, so len will be smaller than size
if( len + num_of_spaces >= size ) {
num_of_spaces = size - len - 1;
}
memset( dest+len, ' ', num_of_spaces );
dest[len + num_of_spaces] = '\0';
}
Ответ 2
void add_spaces(char *dest, int num_of_spaces) {
sprintf(dest, "%s%*s", dest, num_of_spaces, "");
}
Ответ 3
Предположим, что до того, как я назвал любую из нижеперечисленных функций, я взял чтобы иметь достаточное количество памяти, выделенную для пробелов, которые я хочу конкатенации
Итак, в main
предположим, что вы объявили свой массив как char dest[100]
, затем инициализируйте свою строку спецификациями.
like
char dest[100];
memset( dest,' ',sizeof(dest));
Поэтому вам не нужно даже add_spaces(char *dest, int num_of_spaces)
.