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



>im 从输入文本文件中读取行,并将行存储在数组数组中1
一旦我完成读取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("%sn",currentline);
    printf("array1= %sn",(&array1[i]));
    i++;
  }
  for (;i>=0;i--){
    printf("%sn",(&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

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

在这一行中:

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

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

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

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

也去掉那些丑陋的(字符*)演员表,它们在这里是不必要的。
在取消引用 array1 之前,您也
应该检查 malloc 是否有效

相关内容

  • 没有找到相关文章

最新更新