我正在阅读《 The C Programming Language》一书,并完成所有示例,并在GDB中四处浏览以查看发生了什么。
在下面的示例代码中,目标是评估几行文本以确定哪一行最长。我以为我自己的程序失败了,因为gdb挂在了调用的for循环中getchar()
。我遵循了回溯,找到了罪魁祸首的功能,但无法确定确切的问题。然后,我对示例代码进行了相同的处理,并且在for
调用的循环中发生了完全相同的问题getchar()
。
// file: ch1/ex16.c
// OBJECTIVE: Revise the main routine o the lnogest program
// so it will correctly print the length of arbitrarily long
// lines and as much as possible of the text.
#include <stdio.h>
#define MAXLINE 1000
int getLine(char line[], int maxline);
void copy(char to[], char from[]);
int main()
{
int len, max;
char line[MAXLINE], longest [MAXLINE];
max = 0;
while ((len = getLine(line, MAXLINE)) > 0) {
if (len > max) {
max = len;
copy(longest, line);
}
}
if (max > 0) {
printf("%s", longest);
}
return 0;
}
int getLine(char s[], int lim)
{
int c, i;
for (i=0; i < lim - 1 && (c=getchar()) != EOF && c != '\n'; ++i) {
s[i] = c;
}
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
void copy(char to[], char from[])
{
int i = 0;
while ((to[i] = from[i]) != '\0'){
++i;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句