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] = '';
}

Итак, у вас есть стандартное решение для меня, поэтому я не изобретаю колесо?

3 ответов


Я бы сделал

add_spaces(char *dest, int num_of_spaces) {
    int len = strlen(dest);
    memset( dest+len, ' ', num_of_spaces );   
    dest[len + num_of_spaces] = '';
}

но, как заявил @self, функция, которая также получает максимальный размер dest (включая '' в этом примере) безопаснее:

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 '' 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] = '';
}

void add_spaces(char *dest, int num_of_spaces) {
    sprintf(dest, "%s%*s", dest, num_of_spaces, "");
}

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

так main предположим, вы объявили свой массив как char dest[100] затем инициализируйте строку с помощью speces.

как

char dest[100];
memset( dest,' ',sizeof(dest)); 

так вам не нужно даже add_spaces(char *dest, int num_of_spaces).