[英]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.