从c字符串中删除charAt

时间:2013-12-11 18:33:18

标签: c string char

我试图在C中编写简单的removeAt(char * str,int pos),但结果却很困惑。

char c[] = "abcdef";
char* c1 = removeAt(c, 3);

cout << c1;

如果我这样做的话:

static char* removeAt(char* str, int pos)
{
   int i = 0;

   for(i = pos; str[i] != '\0'; i++)
   {
       str[i] = str[++i];
   }

   str[i] = '\0';

   return str;
}

字符串保持不变“abcdef”;

如果我在做:

static char* removeAt(char* str, int pos)
{
 int i, k =0;

for(i = pos, k = pos;  str[i] != '\0'; i++)
{
   str[i] = str[++k];
}

str[i] = '\0';

return str;
}

按预期工作。

1 个答案:

答案 0 :(得分:3)

在这个循环中

for(i = pos; str[i] != '\0'; i++)
{
    str[i] = str[++i];
}

您可以通过执行i来更改i++的值,这样您最终会错过每两个字符或类似字符。将i++更改为i+1

编辑:顺便说一句,

str[i] = str[++i] 

是未定义的行为,因为在增量发生时(在评估左侧之前或之后?)没有指定。如果首先评估右侧,那么您的代码将是

i++;
str[i] = str[i];

正如你所观察到的,有效地无所作为。