0

我从输入文本文件中读取行,一旦我完成读取 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]));
  }
}

输入1.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

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

4

1 回答 1

2

在这一行:

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

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

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

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

也放弃那些丑陋的 (char *) 演员,他们在这里是不必要的。
您也应该在取消引用 array1 之前检查 malloc 是否工作

于 2013-10-19T23:10:39.623 回答