c - 意外的输出,但代码没有错

标签 c pointers

<分区>

我尝试在 CodeBlocks(版本 13.12)上编译它。不知何故,指针在被 toupper() 调用之前递增

#include <stdio.h>
#include <ctype.h>


int main(void)
{
 char str[80] = "the only way";
 char *p;

 p = str;

 while(*p){
    *p++ = toupper(*p);
 }

 printf(str);
 return 0;
}

这导致输出“HE ONLY WAY”,而我正在寻找输出“THE ONLY WAY”。我在我的电脑上试过它给出了错误的输出。然而,当我在 friend 的计算机上尝试这段代码时,代码运行良好,给出了输出“THE ONLY WAY”。 我的问题是为什么我的输出不同? P.s 如果我更换

*p++ = toupper(*p);

*p++ = toupper( *(p-1));

我得到了“THE ONLY WAY”的期望输出。

最佳答案

您的代码导致了未定义的行为。如果您使用前置或后置递增/递减运算符,则在同一语句中多次引用指针是无效的。

将您的代码更改为:

*p = toupper(*p);
p++;

这将确保指针 p 仅在您使用它后 发生变化。

关于c - 意外的输出,但代码没有错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27472969/

相关文章:

c - 虚拟地址如何分配?

c - C 中函数返回时的堆栈粉碎

C++:将字节缓冲区转换为另一种类型时的对齐

c - 为什么这会给出垃圾字符?

c - 如何使用正则表达式?

无法进入 "if"条件。为什么?

c - 为什么下面的程序输出是 5,而不是 4?谁能解释一下?

strcpy 的 C 实现不改变变量值

c - setuid 与 seteuid 函数

c - 为什么我的命令窗口在传递标签时显示总线错误?