本节书摘来自异步社区《C语言接口与实现:创建可重用软件的技术》一书中的第1章,第1.5节,作者 傅道坤,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.5 习题
1.1 在一个单词结束于换行符时,getword在〈scan forward to a nonspace or EOF 5〉代码块中将linenum加1,而不是在〈copy the word intobuf[0..size-1] 5〉代码块之后。解释这样做的原因。如果在本例中,linenum的加1操作是在〈copy the word into buf[0..size-1] 5〉代码块之后进行,会发生什么情况?
1.2 当double在输入中发现3个或更多相同单词时会显示什么?修改double来改掉这个“特性”。
1.3 许多有经验的C程序员会在strcpy的循环中加入一个显式的比较操作:
char *strcpy(char *dst, const char *src) {
char *s = dst;
while ((*dst++ = *src++) != '\0')
;
return s;
}
显式比较表明赋值操作并非笔误。一些C编译器和相关工具,如Gimpel Software的PC-Lint和LCLint[Evans,1996],在发现赋值操作的结果用作条件表达式时会发出警告,因为这种用法是一个常见的错误来源。如果读者有PC-Lint或LCLint,可以在一些“测试”过的程序上进行试验。