【发布时间】:2015-09-13 15:33:41
【问题描述】:
我在尝试理解 toupper() 函数时遇到了一个有趣的问题。请在下面找到代码: 这里的问题在于输出中我总是 missing 我输入字符串的第一个字符。
请纠正我的错误。我在谷歌上做了太多关于这个之后发布这个。
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++),并且中间没有序列点。 -
这段代码在C程序员之间的竞争中是goog,但bau i普通代码应该有很好的控制效果。在同一个地方内联的操作太多