这行代码有什么作用? [新手]

时间:2017-01-20 17:22:40

标签: c cs50

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上正常工作)

1 个答案:

答案 0 :(得分:1)

代码试图在数组n中找到非字母字符的每一个匹配项后跟一个字母字符,并在每个字母字符中以大写字母打印该字母字符。

问题是,由于i0的值开头,因此代码在第一次迭代中具有未定义的行为,因为它在数组开始之前访问了一个字符。

代码似乎在cs50下可以正常工作,但这只是偶然事件。未定义行为的一个特征是不需要产生任何错误或任何意外结果。但这并不是正确的。它只是意味着它在某些情况下不会产生可观察到的症状。

注意:为了便于讨论,我假设string是指向char的指针,GetString()返回char数组中第一个字符的地址}。