c - c中的指针和动态内存分配

标签 c file-io malloc

我从输入文本文件中读取行,并将这些行存储在数组 array1
一旦我读完 id 就想打印出数组中的元素..id 喜欢做动态内存分配..但那是在我让这部分工作之后.. 到目前为止我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 256

int main(){

  FILE* fp;
  fp=fopen("input.txt","r");
  char currentline[MAX_LEN];
  int i=0;

  char *array1;
  array1 = malloc(10*MAX_LEN);
  while(fgets(currentline,MAX_LEN,fp)!=NULL && i<10){

    strcpy((char *)&array1[i],currentline);
    printf("%s\n",currentline);

    printf("array1= %s\n",(&array1[i]));
    i++;
  }
  for (;i>=0;i--){
    printf("%s\n",(&array1[i]));
  }
}

input1.txt

101
84
65
13
hello
90
24
94
73
70
68
94
65

输出:

101

array1= 101

84

array1= 84

65

array1= 65

13

array1= 13

hello

array1= hello

90

array1= 90

24

array1= 24

94

array1= 94

73

array1= 73

70

array1= 70

0

70

770

9770

29770

929770

h929770

1h929770

61h929770

861h929770

1861h929770

我想要它做的是打印出每个元素..但它打印每行的第一个字符..这是什么原因造成的?

最佳答案

在这一行中:

    strcpy((char *)&array1[i],currentline);

您将当前行复制到 array1,从它的第 i 个元素开始。
所以基本上你首先复制从 array[0] 开始的 currentLine,然后保留第一个元素并复制从 array[1] 开始的下一个 currentLine 等等。每次你覆盖之前的 currentLine 除了它的第一个元素。
你想要(我想)做的是:

    strcpy(&array1[i*MAX_LEN],currentline);

这会将每个 currentLine 保存在它自己的 256 个字符的 block 中。
对于 i=0 你将从 array[0],
开始写 对于数组 [256] 中的 i=1...

同时删除那些丑陋的 (char *) 转换,它们在这里是不必要的。
您也应该在取消引用 array1 之前检查 malloc 是否工作

关于c - c中的指针和动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19472106/

相关文章:

c - 具有信号量和 fork 的产品消费者

c++将文件连接返回给成员,因此可以由同一类的其他方法使用

c - 关于函数内部的自由指针有点令人困惑

c - 什么是纯C中的类

c++ - 命令行参数的元素数量

java - 我的代码生成器无法正常工作

java - 从文件收集数据在 Java 中返回空字符串

c - 分配对象和结构的有效类型

c - 如何使我的递归 C 程序更有效率?

c - 写入 I2C 的缓冲区在读取时不返回