Замена одного символа двумя в 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;
}
Другие вопросы по тегам