我从输入文本文件中读取行,并将行存储在数组数组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/