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

标签 c

你好,我正在练习 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/

相关文章:

c - 创建某些位掩码的步骤?

c - 如何理解DFT结果

我可以在临时结果中溢出 uint32_t 吗?

c - 了解有关内存对齐的 C 程序

c - 将base64编码器C源代码转换为bash内置脚本

不调用 cplex mip 求解器的 cplex 预求解器

c - c 中是否有一种干净的方法来创建一个函数来调用具有不同参数的其他函数?

c - 比 fgets 更快地读取一行输入?

c - malloc 边界大小 : is there a performance difference

C - 指向 double 和 double 组的指针之间的细微差别。将一个转换为另一个?