我应该如何在 c 中存储从 getline() 获得的第一行?

How should I store the first line that got from getline() in c?

int main(){
    char *input = NULL; 
    char *first = NULL;
    size_t len = 100;
    int count = 0;  
    while(getline(&input, &len, stdin)!= EOF){
        if(count == 0){
            first = input;
            printf("------>%s, count = %d\n", first, count);//test printer
        }
        else{
            printf("%d, %s, %s\n", count, input, first);//test printer
        }
        count++;
    }

    return 0;
}

我试图分开两部分——我输入的第一行和第一行之后的其余字符串...但我不知道为什么我不能成功地单独存储第一行。

为了停止将输入分配给第一(第一行输入),我使用计数来确定我应该在哪里停止,这意味着如果计数为零,这意味着我的输入是第一行。然后在 while 循环中,在你输入第二行之后,你将打印第二行,第一行......我在 else 语句上设置了测试打印机,我发现当我输入第二行时第一行发生了变化。这意味着当跳转到 else 语句时,首先不是打印我想要的(实际第一行)而是与输入相同的行。

我对此很困惑。为什么价值改变了?我应该如何将第一行值存储在单独的 char 数组中?

这是因为你让firstinput指向同一个内存。赋值 first = input.

后,两个变量都指向同一内存

您需要 复制 字符串,例如使用strdup:

first = strdup(input);

另请注意,您使用的是 the getline function wrong. From the manual page:

If *lineptr is set to NULL and *n is set 0 before the call, then getline() will allocate a buffer for storing the line

对于分配内存的 getline 函数,您也需要将 len 设置为零。 或者自己分配内存。如果 *nnot 零,上面的文本暗示 getline 调用不分配内存,但使用指针 *lineptr 因为它是有效的并且指向至少 *n 字节的已分配内存。您有一个空指针,这将导致 *undefined 行为,因为 getline 使用该指针并写入它指向的内存。

请记住,如果您要求 getline 为您分配内存,而您使用 strdup,那么您需要 free 该内存。

最后,getline可以修改长度,所以你需要在每次调用前重新设置它。