gpt4 book ai didi

c - 为什么我要打印路径?

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

我正在尝试编写一个简单的代码,该代码要求输入一个单词并在没有第一个字母的情况下重复它,直到该单词为空
举个例子 :

hello
ello
llo
lo
o

我编写了一个非常有效的代码:

#include <stdlib.h>
#include <stdio.h>


int main(){
char* p=(char*)(malloc(50*sizeof(char)));
scanf("%s",p);
while (*p!='\0',printf("%s\n",++p)>1);
}

但在此之前,我首先尝试使用 :while (*p!='\0',printf("%s\n",++p)); 的版本,当我尝试时它对输入的单词运行得很好,但随后它开始对我的 PATH 执行同样的操作。所以我想知道为什么程序总是提示我的 PATH ?我使用的是 mingw 的 Windows 7 64 位系统。

谢谢大家!祝你有美好的一天!

最佳答案

这是因为the comma operator有效。

它评估左侧和右侧,并丢弃左侧结果。这意味着条件 *p != '\0' 被计算,但结果未被使用。

相反,它是 printf 的结果将用作循环中唯一条件的函数。它将返回打印的字符数,包括空格和换行符等内容。由于打印换行符,返回值将始终至少为1。在 C 中,只有 0 被认为是 false,并且会停止循环。

您应该使用逻辑 AND 运算符 && 而不是逗号运算符:

while (*p!='\0' && printf("%s\n",++p));

现在,当左侧(即 *p!='\0')变为 false 时,循环应该停止。

<小时/>

如果没有上述更改或您所做的更改,您的循环将超出字符串甚至您分配的内存的范围。这导致 undefined behavior ,这意味着任何事情都可能发生。

对于您来说,环境的一部分似乎恰好位于内存中您分配的内存的旁边。

关于c - 为什么我要打印路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53340290/

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