Замена одного символа двумя в C
Я хочу заменить символ двумя символами в моей строке.
void strqclean(const char *buffer)
{
char *p = strchr(buffer,'?');
if (p != NULL)
*p = '\n';
}
int main(){
char **quest;
quest = malloc(10 * (sizeof(char*)));
quest[0] = strdup("Hello ?");
strqclean(quest[0]);
printf(quest[0]);
return;
}
Это прекрасно работает, но на самом деле я хочу заменить свое "?" "?\n". strcat не работает с указателями, верно? Я могу найти решение, добавив символ в мою строку и заменить его на '\ n', но это не то, что я действительно хочу.
Спасибо!
1 ответ
РЕДАКТИРОВАТЬ
В своем первоначальном ответе вы упомянули, что хотите добавить новую строку после ?
, но теперь эта ссылка исчезла.
Мой первый ответ на этот вопрос, но так как он ушел, я не уверен, что вы действительно хотите.
НОВЫЙ ОТВЕТ
Вы должны изменить свой strqclean
функция
// remove the const from the parameter
void strqclean(char *buffer)
{
char *p = strchr(buffer,'?');
if (p != NULL)
*p = '\n';
}
СТАРЫЙ ОТВЕТ
strcat
работает с указателями, но strcat
ожидает C-строку и ожидает, что буфер назначения имеет достаточно памяти.
strcat
позволяет вам объединять строки. Вы можете использовать, чем добавить \n
если ?
символ всегда находится в конце строки. Если символ, который вы хотите заменить, находится посередине, вы должны вставить символ посередине. Для этого вы можете использовать memmove
это позволяет перемещать фрагменты в память, когда назначение и источник перекрываются.
#include <stdio.h>
#include <string.h>
int main(void)
{
char line[1024] = "Is this the real life?Is this just fantasy";
char *pos = strchr(line, '?');
if(pos)
{
puts(pos);
int len = strlen(pos);
memmove(pos + 2, pos + 1, len);
pos[1] = '\n';
}
puts(line);
return 0;
}