gpt4 book ai didi

c - 关于使用指针算术的 toupper()

转载 作者:行者123 更新时间:2023-11-30 19:15:28 24 4
gpt4 key购买 nike

我在尝试理解 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

最佳答案

while(*ptr++ = toupper(*ptr))

这条线有问题。您倾向于在单个执行行中多次更改 ptr 的值,从而调用未定义的行为

C99 §6.5: “2. Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be read only to determine the value to be stored.”

在另一行中增加。

while(*ptr= toupper(*ptr)){
// your code
...
ptr++;

}

关于c - 关于使用指针算术的 toupper(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32551329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com