C替换特殊字符

C替换特殊字符,c,C,我想将“字符替换为\”,我使用以下代码: #include <stdio.h> #include <string.h> int main() { int i, j = 0; char str[] = "HELLO'All"; char pch[128] = { 0 }; for (i = 0; i < strlen(str); i++) { if (str[i] == '\'') { pch

我想将“字符替换为\”,我使用以下代码:

#include <stdio.h>
#include <string.h>

int main() {
    int i, j = 0;
    char str[] = "HELLO'All";
    char pch[128] = { 0 };

    for (i = 0; i < strlen(str); i++) {
        if (str[i] == '\'') {
            pch[j] = '\\';
            printf(" pch[%d] = *%c* \n", j, pch[j]);
            pch[++j] = str[i];
            continue;          
        }
        pch[j++] = str[i];
    }
    printf("pch = *%s* \n", pch);
    return 0;
} 
我得到的结果是:pch=*HELLO\All* 预期结果:pch=*HELLO\\所有*
我的代码中缺少了什么?

似乎缺少了j的增量

像这样试试

  pch[j++]='\\';
  printf(" pch[%d] = *%c* \n",j-1,  pch[j-1]);
  pch[j++]=str[i];
  pch[j]='\\';
  printf(" pch[%d] = *%c* \n",j,  pch[j]);
  ++j;
  pch[j++]=str[i];
还是像这样

  pch[j++]='\\';
  printf(" pch[%d] = *%c* \n",j-1,  pch[j-1]);
  pch[j++]=str[i];
  pch[j]='\\';
  printf(" pch[%d] = *%c* \n",j,  pch[j]);
  ++j;
  pch[j++]=str[i];

如果您想替换原始字符串str中的撇号'

str[i] = '\\';
在以开头的if块中

if(str[i]=='\'')

这会奏效的。只有零钱。因为它是一个字符数组,所以不能添加字符串

int main()
{
    int i,j=0;
    char str[] = "HELLO'All";
    char pch[128]={0};

    for(i=0; i< strlen(str); i++)
    {
      if(str[i]=='\'')
      {
        pch[j]='\\';
        j++;
        pch[j]='\'';
        pch[++j]=str[i];
        continue;          
    }
    pch[j++]=str[i];
  }
  printf("pch = *%s* \n", pch);
  return 0;
}
当插入\时,您忘记了第二次增加j

以下是一个经过更正和简化的版本:

#include <stdio.h>
#include <string.h>

int main() {
    int i, j;
    char str[] = "HELLO'All";
    char pch[128];

    for (i = j = 0, str[i] != '\0'; i++) {
        if (str[i] == '\'') {
            pch[j++] = '\\';
        }
        pch[j++] = str[i];
    }
    pch[j] = '\0';
    printf("pch = *%s*\n", pch);
    return 0;
}

请注意,还应将\替换为\\,并检查目标数组是否足够大,而不是发布的代码有问题,但是一个更一般的例程需要将j与pch的大小进行比较。

您希望得到什么字符串?尝试通过调试器一步一步地运行您的程序。@Acorn我想他希望HELLO“All,即在单引号前插入反斜杠