簡體   English   中英

從C字符串中刪除charAt

[英]Removing charAt from c string

我正在嘗試用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;
}

確實按預期工作。

在這個循環中

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];

如您所見,實際上什么也沒做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM