C 从文件中读取文本,在arrray中存储行

C 从文件中读取文本,在arrray中存储行,c,file,text,C,File,Text,这是我的密码。它当前从文本文件中读取,一次读取一行。我使用strcpy将每一行存储到数组“lines”中。我的问题是,如何打印此arrray的元素?目前该代码已编译并运行,但没有输出 #include <stdio.h> #include <string.h> int main() { FILE *ptr_file; char buf[1000]; char lines[10][500]; //num of strings, lengt

这是我的密码。它当前从文本文件中读取,一次读取一行。我使用strcpy将每一行存储到数组“lines”中。我的问题是,如何打印此arrray的元素?目前该代码已编译并运行,但没有输出

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *ptr_file;
    char buf[1000];
    char lines[10][500];

    //num of strings, length of strings
    char *pointertoarray = lines[0];

    ptr_file =fopen("d1.txt","r");

    fgets(buf,1000, ptr_file)!=NULL;
    strcpy(buf, lines[0]);

    fgets(buf,1000, ptr_file)!=NULL;
    strcpy(buf, lines[1]);

    fclose(ptr_file);

    printf("%s", pointertoarray);

    return 0;
}   
#包括
#包括
int main()
{
文件*ptr_文件;
char-buf[1000];
字符行[10][500];
//字符串数,字符串长度
char*pointertoarray=行[0];
ptr_file=fopen(“d1.txt”、“r”);
fgets(buf,1000,ptr_文件)!=NULL;
strcpy(buf,行[0]);
fgets(buf,1000,ptr_文件)!=NULL;
strcpy(buf,行[1]);
fclose(ptr_文件);
printf(“%s”,pointertoarray);
返回0;
}   

strcpy的第一个参数是目标。认为“赋值”

strcpy的第一个参数是目的地。想想“任务”

这个:

strcpy(buf, lines[0]);
应该是:

strcpy(lines[0], buf);
要打印它,您可以执行以下操作:

printf("%s\n", lines[0]);
printf("%s\n", lines[1]);
此外,您正在读取1000个字符的字符串,并将其复制到500个字符的缓冲区。。。这可能不太好。调整缓冲区,使大小匹配,或使用strncpy限制复制的字符量,以免溢出

在任何情况下,您都可能希望使用循环来读取行,而不是硬编码。您可以使用fgets读取行,并使用malloc为每一新行动态分配内存。这需要更多的工作,但最终会更好,因为它将允许您读取具有未知行数的文件,而不必在读取多少行之前决定。

这:

strcpy(buf, lines[0]);
应该是:

strcpy(lines[0], buf);
要打印它,您可以执行以下操作:

printf("%s\n", lines[0]);
printf("%s\n", lines[1]);
此外,您正在读取1000个字符的字符串,并将其复制到500个字符的缓冲区。。。这可能不太好。调整缓冲区,使大小匹配,或使用strncpy限制复制的字符量,以免溢出


在任何情况下,您都可能希望使用循环来读取行,而不是硬编码。您可以使用fgets读取行,并使用malloc为每一新行动态分配内存。这需要更多的工作,但最终会更好,因为它将允许您读取具有未知行数的文件,而不必在读取多少行之前决定。

您可能希望使用循环打印出来。下面将打印出数组的所有内容。在C语言中,可以使用for或while循环

您可能需要在主阵列之外定义阵列的大小:

#DEFINE SIZE1 1000;
#DEFINE SIZE2 10;
你可以说:

int count = 0;
int count2 = 0;
for(count1 = 0; count1 < SIZE1; count1++)
{
     for(count2 = 0; count2 < SIZE2; count2++)
    {
          printf("%c", lines[count2][count1]);
    }
       printf("\n");
}
int count=0;
int count2=0;
对于(count1=0;count1
您可能希望使用循环将其打印出来。下面将打印出数组的所有内容。在C语言中,可以使用for或while循环

您可能需要在主阵列之外定义阵列的大小:

#DEFINE SIZE1 1000;
#DEFINE SIZE2 10;
你可以说:

int count = 0;
int count2 = 0;
for(count1 = 0; count1 < SIZE1; count1++)
{
     for(count2 = 0; count2 < SIZE2; count2++)
    {
          printf("%c", lines[count2][count1]);
    }
       printf("\n");
}
int count=0;
int count2=0;
对于(count1=0;count1
具有大于
行的
buf
元素是危险的,因为
strcpy()
可能会溢出后者。理想情况下,您应该使用malloc动态分配所有内容。最近有几个类似的问题需要解决。让
buf
大于
的元素是危险的,因为
strcpy()
可能会溢出后者。理想情况下,您应该使用malloc动态分配所有内容。最近他遇到了几个类似的问题。