我在嘗試理解toupper()函數時遇到了一個有趣的問題。請找到下面的代碼: 問題在這裏是在輸出我失蹤我的輸入字符串始終的第一個字符。關於toupper()使用指針運算
請糾正我的錯誤。我在發佈這篇文章之後對此做了太多的介紹。
void UpperString()
{
char arr [10];
memset(arr, 0x00, sizeof(arr));
strcpy(arr, "abcd");
char *ptr = arr;
char *temp = ptr;
printf("Before Upper String - %s\n",ptr);
while(*ptr++ = toupper(*ptr))
{
printf("ptr - %s\n",ptr);
printf("FULL - %s\n",temp);
}
printf("After Upper String - %s\n",temp);
return;
} // UpperString()
輸出
Before Upper String - abcd
ptr - bcd
FULL - Bbcd
ptr - cd
FULL - BCcd
ptr - d
FULL - BCDd
After Upper String - BCD
我認爲你必須在'* PTR ++ = TOUPPER(* PTR)未定義的行爲':你從'ptr'讀取(在'* ptr',函數參數)並且你正在修改'ptr'(在'ptr ++'中),並且它們之間沒有序列點。 – melpomene
這段代碼是C程序員之間的競爭對手,但是我保存的正常代碼保持良好的控制效果。太多的操作在同一個地方內聯 –