在C中用两个字符替换一个字符

Replacing one character with two in 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”,但这不是我真正想要的。

谢谢!

编辑

在你最初的回答中你提到你想在后面追加一个换行符 ?,但现在这个引用不见了。

我的第一个回答解决了这个问题,但因为它已经消失了,我不确定你 好想要


新答案

您必须更改 strqclean 功能

// remove the const from the parameter
void strqclean(char *buffer)
{
  char *p = strchr(buffer,'?');
  if (p != NULL)
    *p = '\n';
}

旧答案

strcat 使用指针,但 strcat 期望 C 字符串并期望 目标缓冲区有足够的内存。

strcat 允许您连接字符串。您可以使用 than 附加 \n if ? 字符始终位于字符串的末尾。如果那个字符 你要替换的是在中间,你必须插入字符 中间。为此,您可以使用 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;
}