我从输入文本文件中读取行,并将行存储在数组数组1中
一旦我读完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);

将currentline复制到array1,从其第i个元素开始。
所以基本上,首先从array[0]开始复制currentLine,然后离开第一个元素,从array[1]开始复制下一个currentLine,依此类推。每次覆盖除第一个元素之外的前一个currentLine时。
你想(我想)做的是:
    strcpy(&array1[i*MAX_LEN],currentline);

它将把每个当前行保存在256个字符的块中。
如果i=0,则从数组[0]开始写入,
对于数组[256]处的i=1。。。
也可以去掉那些难看的(char*)类型,它们在这里是不必要的。
在取消对array1的引用之前,还应该检查malloc是否工作

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

10-09 22:03