Можно ли удалить пробелы в начале и в конце строки без создания нового массива?

Да, в языке программирования C можно удалить пробелы в начале и в конце строки без создания нового массива.

Для этого можно использовать указатели на начало и конец строки, а также указатель на текущий символ. Вначале создаем указатели, указывающие на начало и конец строки:

char *start = str; // указатель на начало строки
char *end = start + strlen(str) - 1; // указатель на конец строки

Теперь, с помощью цикла while, будем двигаться от начала и от конца строки внутрь строки, пока не достигнем символа, не являющегося пробелом.

while (*start == ' ') {
    start++;
}
while (*end == ' ') {
    end--;
}

После этого можно использовать указатели start и end для получения обновленной строки без пробелов в начале и в конце.

int new_length = end - start + 1; // длина обновленной строки
strncpy(str, start, new_length); // копирование обновленной строки в изначальную строку
str[new_length] = ''; // добавление завершающего нулевого символа

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

Весь код выглядит следующим образом:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "   Hello, World   ";
    char *start = str;
    char *end = start + strlen(str) - 1;
    
    while (*start == ' ') {
        start++;
    }
    
    while (*end == ' ') {
        end--;
    }
    
    int new_length = end - start + 1;
    strncpy(str, start, new_length);
    str[new_length] = '';
    
    printf("Updated string: "%s"n", str);
    
    return 0;
}

Вывод программы будет: "Updated string: "Hello, World"".