我正在进行CS50 pset3音乐练习(这是下面练习的一部分)。我提出了一些问题:
is_rest()
在helpers.c中完成is_rest的实现。回想一下,空行代表我们机器可读格式的休止符。并回想一下,synthesize将调用此函数以确定用户输入的其中一行是否确实为空。
空行是什么意思?要回答这个问题,首先要查看cs50.h本身,其中记录了get_string:
https://github.com/cs50/libcs50/blob/develop/src/cs50.h
PS:我查了链接但找不到/明白了。
如果用户只是按Enter键,那么get_string上面的注释会说该函数会返回,从而仅输入“行结尾”(即\ n)?
当is_rest随后传递了这样一个字符串时,s,它应该如何识别(不,你!)?
我的问题是:
为什么代码不能正常工作呢?
// Determines whether a string represents a rest
bool is_rest(string s)
{
if (s == "")
{
return true;
}
return false;
}
但是这个很明显:
bool is_rest(string s)
{
if(s[0] == '\0')
{
return true;
}
return false;
}
两种情况下使用的方法之间有什么区别?
另一方面,有人可以解释一下""
和'\0'
答案 0 :(得分:1)
更新
如@Mark Benningfield所述,string
只是char *的别名。在这种情况下,您无法直接比较它,但您需要使用strcmp()函数。
表达式s==""
会比较s是否指向""
之类的相同地址,但如果s具有与""相同的内容则不会。
另一方面,表达式s[0]=='\0'
您正在访问字符串s
的第一个字符并测试是否包含\0
。
因为第二个表达式是正确的,而第一个表达式没有。