gpt4 book ai didi

c - 在 C 中使用带指针的数组

转载 作者:太空狗 更新时间:2023-10-29 15:53:31 27 4
gpt4 key购买 nike

你好,我正在练习 C,我对下面的代码有一点问题。首先,我的程序只读取用户的输入,如果有可用的内存,它会存储它,否则什么都不做。

我有一个指向 char 的指针数组,称为“lines”,还有一个用于临时存储输入的 char 数组,称为“line”。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXWIDTH 81
#define MAXLINES 100

int main ()

{
char* lines [MAXLINES];
char line[MAXWIDTH];
int i ;
int n ;


然后我将检查我的指针数组是否有空间并且输入是否为非零。我在 for 循环中执行此操作以填充数组,通常当我什么都不输入并按 enter 或数组已满时,for 循环应该停止。如果有空间,我将检查指针指向的空间是否有足够的内存。如果没问题 (!= NULL),程序会将来自 gets(line) 的输入复制到内存中。

for (n = 0; n < MAXLINES && gets(line) != NULL; n++)    

{
if ((lines[n] = malloc(strlen(line) + 1)) == NULL)
exit (1);
strcpy(lines[n], line);
}


其余代码仅用于输出和释放内存。

    for (i = 0; i < n; i++)
{
puts(lines[n-i-1]);
free(lines[n-i-1]);
}


return 0;
}


现在的问题是,程序运行没有任何错误,但它没有按我想要的那样工作。它只是在执行一个无限循环,我可以在其中输入任意长的内容,而无需任何反应。

最佳答案

gets 不会在您键入空行时返回 NULL,如果这是您尝试检查的内容。它仍然是一个空字符串。如果要查找空行,则需要检查第一个字符是否为 \0

旁注,gets 非常不安全,因为如果您的行太长,它会溢出您的缓冲区并导致严重错误。请改用 fgets,它允许您指定缓冲区的大小。 (请注意,fgets 会在字符串的末尾添加一个 \n,即使它是一个空行。)

关于c - 在 C 中使用带指针的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4375358/

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