C 从文件中读取文本,在arrray中存储行
这是我的密码。它当前从文本文件中读取,一次读取一行。我使用strcpy将每一行存储到数组“lines”中。我的问题是,如何打印此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
#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动态分配所有内容。最近他遇到了几个类似的问题。