Я бы хотел, чтобы ch
был добавлен в начале, а не в конце, и я не знаю, как это исправить.
Не использовать strcat
за это. strcat
всегда добавляет копию строки, на которую указывает второй аргумент, к концу строки, на которую указывает первый аргумент, а не к его началу.
Вместо этого можно использовать буфер и последовательность вызовов для strcpy
:
char *ch = '-'; // Note the `-` is a character, not a string.
char buf[N];
buf[0] = *ch; // Copy `-` to the first element of `buf`.
strcpy(&buf[1], literal->name); // Copy the string in `name` to `buf`,
// starting at the second element of `buf`.
strcpy(literal->name, buf); // Copy the string in `buf` back to `name`.
printf("%s", literal->name);
Обратите внимание, что name
должен иметь дополнительный элемент, содержащий добавленный символ -
и Конечно, элемент для хранения завершающего нулевого символа. Также буфер должен быть способен содержать строку в name
плюс добавленный -
и нулевой символ.
Вы также можете опустить ch
, так как он не нужен и немного кодировать более компактный:
char buf[N];
buf[0] = '-';
strcpy(&buf[1], literal->name);
strcpy(literal->name, buf);
printf("%s", literal->name);
Или вы можете отсортировать каждый символ строки по name
на один элемент вперед (включая нулевой символ) и затем присвоить '-'
первому элементу name
:
size_t len = strlen(literal->name);
for ( size_t i = 0; i < (len + 1); i++ )
{
literal.name[i+1] = literal.name[i];
}
literal.name[0] = '-';
Но, опять же, здесь name
требует способности содержать строку + '-'
+ нулевой символ.