Добавить символ в строку - язык NXC
Я хочу написать себе функцию, похожую на PHP str_repeat
, Я хочу, чтобы эта функция добавляла указанное количество символов в конце строки.
Это код, который не работает (string argument 2 expected!
)
void chrrepeat(const char &ch, string &target, const int &count) {
for(int i=0; i<count; i++)
strcat(target, ch);
}
2 ответа
Я точно не знаю, что это за язык (C++?), Но вы, кажется, передаете символ strcat()
вместо строки с нулевым символом в конце. Это тонкая разница, но strcat
будет с радостью получать доступ к другим недействительным позициям в памяти, пока не будет найден нулевой байт
Вместо того, чтобы использовать strcat
, что неэффективно, потому что он всегда должен искать до конца строки, вы можете сделать пользовательскую функцию только для этого.
Вот моя реализация в C:
void chrrepeat(const char ch, char *target, int repeat) {
if (repeat == 0) {
*target = '\0';
return;
}
for (; *target; target++);
while (repeat--)
*target++ = ch;
*target = '\0';
}
Я сделал это вернуть пустую строку для случая, когда repeat == 0
потому что так работает в PHP, согласно онлайн-руководству.
Этот код предполагает, что в целевой строке достаточно места для повторения. Подпись функции должна быть достаточно понятной, но вот пример кода, который ее использует:
int main(void) {
char test[32] = "Hello, world";
chrrepeat('!', test, 7);
printf("%s\n", test);
return 0;
}
Это печатает:
Hello, world!!!!!!!
Преобразовать символ в строку.
void chrrepeat(char ch, string &target, const int count) {
string help = "x"; // x will be replaced
help[0] = ch;
for(int i=0; i<count; i++)
strcat(target, help);
}