int main(void)
{
string n = GetString();
if(n!=NULL){
for(int i=0, j=strlen(n); i<j; i++){
if(!isalpha(n[i-1]) && isalpha(n[i])){
printf("%c", toupper(n[i]));
}
}
}
}
if(!isalpha(name [i-1])&amp;&amp; isalpha(name [i]))
如何将此行解释为新的启动器?(顺便说一下,代码在哈佛的cs50 ide上正常工作)
答案 0 :(得分:1)
代码试图在数组n
中找到非字母字符的每一个匹配项后跟一个字母字符,并在每个字母字符中以大写字母打印该字母字符。
问题是,由于i
以0
的值开头,因此代码在第一次迭代中具有未定义的行为,因为它在数组开始之前访问了一个字符。
代码似乎在cs50下可以正常工作,但这只是偶然事件。未定义行为的一个特征是不需要产生任何错误或任何意外结果。但这并不是正确的。它只是意味着它在某些情况下不会产生可观察到的症状。
注意:为了便于讨论,我假设string
是指向char
的指针,GetString()
返回char
数组中第一个字符的地址}。