代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[]){
int i=0;
char number[1024];
char *n[1000];
FILE *fp;
fp=fopen(argv[1],"r");
if (fp==NULL){
printf("ERRORn");
return EXIT_FAILURE;
}
while (fgets(number,1024,fp)!=NULL){
n[i]=number;
i++;
}
for (i=0;i<4;i++){
printf("%s",n[i]);
}
fclose(fp);
return 0;
}
我要做的是读取一个包含一些数字的文件,并存储文件的行,以便我可以访问它们。我想要的输出(即我想要复制的txt文件的内容)将是:
853482512205
但是我现在写的是:
205205205205
关于如何存储文件的所有数字,而不是只有最后一个数字的任何建议?
您最终打印相同的值,因为n
指向相同的内存,这是您使用fgets()
读取的最后一个字符串。您可以使用malloc()
和realloc()
来获得您想要的结果。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i = 0;
char(*n)[1000]; /* pointer to an array of 1000 chars */
FILE *fp;
if (argc < 2)
{
fprintf(stderr,"Not enough argumentsn");
return EXIT_FAILURE;
}
fp = fopen(argv[1], "r");
if (fp == NULL)
{
fprintf(stderr,"ERRORn");
return EXIT_FAILURE;
}
n = malloc(sizeof(*n));
if (n == NULL)
{
fprintf(stderr,"ERRORn");
return EXIT_FAILURE;
}
while (fgets(n[i++], 1024, fp) != NULL) /* strcpy is redundant here,since we can just save in the buffer directly*/
{
n = realloc(n, (i + 1) * sizeof(*n)); /* realloc each time so you can store another string */
if (n == NULL)
{
fprintf(stderr,"ERRORn");
return EXIT_FAILURE;
}
}
for (int j = 0; j < i - 1; j++)
{
printf("%s", n[j]);
}
free(n);
fclose(fp);
return 0;
}
虽然上面的方法可以工作,但是将malloc
初始化为X量的内存会更有效,如果您最终需要更多的内存,则调用realloc()
。