gpt4 book ai didi

c - 理解来自 K&R 的代码

转载 作者:太空宇宙 更新时间:2023-11-04 07:22:25 25 4
gpt4 key购买 nike

我正在为我的 c 语言类(class)阅读 K&R,我对第 5.6 节的函数阅读行有疑问:

/*readlines: read input lines*/
int readlines(char *lineptr[], int maxlines)
{
int len, nlines;
char *p, line[MAXLEN];

nlines=0;
while ((len=getline(line, MAXLEN))>0) //getline gets a line of chars and return its
//length. if the length is negative,
// no line exits.
if (nlunes>=maxlines || (p=alloc(len))==NULL) //alloc allocates storage for input
return -1;
else{
line[len-1]='\0' //**THIS IS THE PART I DON'T UNDERSTAND**
strcpy(p,line); //copies line into p (strings)
lineptr(nlines++)=p;
}
return nlines; /*return number of lines we could read*/

所以这个函数是排序函数的一部分,它使用 qsort 和指针按字典顺序对字符行数组进行排序。

我特别不明白下面这行是做什么的

line[len-1]='\0' //**THIS IS THE PART I DON'T UNDERSTAND**

为什么我们要删除“上一行”或“新行”?

此外,以下内容也不干净:

p=alloc(len)

我知道我们为 p 分配了存储空间,它是一个指针。所以我们在内存中为行的长度分配适当的存储空间。对吗?

最佳答案

line[len-1]='\0'

因为 getline\n 放在最后一个字符。

getline函数if(c=='\n'){s[i]=c;++i; }

还有p 被分配给 block of length of line 以便可以将该行复制到 to 因为 line 用于存储后续字符行,如果不复制,所有行都将丢失。

关于c - 理解来自 K&R 的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20581805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com