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