以下是我遇到的程序
#include <stdio.h>
void sp_to_dash(const char *str);
int main(void)
{
sp_to_dash("this is a test");
return 0;
}
void sp_to_dash(const char *str)
{
while(*str) //beginning of while loop
{
if(*str== ' ')printf("%c", '-');
else printf("%c", *str);
str++;
}
}
在while
循环开始时,我们可以看到while(*str)
是在没有任何条件的情况下启动的,这意味着当*str
应该停在null
时没有提到或'\0'
。代码工作正常,但据我说它应该是while(*str != null)
或while(*str != '\0')
。请向我解释一下。
答案 0 :(得分:1)
与写这个相同 -
while (*str != '\0')
'\0'
的类型为int,等同于0
,不会影响循环的执行。
注意 - 不要将字符串与==
进行比较,也不要有运算符!==
。
如果您使用此功能(将char
与字符串文字进行比较),这将导致错误 -
while (*str != "\0")
答案 1 :(得分:1)
while循环需要一个值作为条件才能工作。当您插入while (*str == '3')
之类的条件时,您的条件会检查*str
实际上是'3'
,如果是,则会将其解释为1
(您可以将其视为True,如果您(如果没有),它将其解释为0
(或False)。
这就是您可以撰写while (0)
或while (1)
。
现在,您的条件是*str
的值,因此,在条件检查期间,您将检查*str
的值,以查看它是0
还是(每隔一个值(-1,7,32333.34 ......)被视为True) str
是const char *
所以我们需要将char值转换为int值(使用ASCII)。值为0的char
为'\0'
。
答案 2 :(得分:0)
它与(* str!=&#39; \ 0&#39;)的条件完全相同,因为\ 0的ascii值为0所以当* str为\ 0时循环将停止,意味着在字符串的结尾,
*除0之外的任何其他值都是其自身的真实条件(如* str)并将导致while循环继续e,g:while(5){}将是无限循环。