打印动态分配的数组时出现分段错误。我不熟悉动态分配的数组,所以这可能是个问题。如果我注释掉我正在打印数组的每个元素的for循环,我的程序编译得很好。所以我觉得我的readText函数很好,但我可能错了。我在问这个问题之前已经做过研究,但我找不到答案。我只需要能够打印出text1数组的每个元素。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int ch1, ch2;
int size1, size2;
FILE *fh1, *fh2;
if( argc<3 ) {
printf("need two file names\n"); return(1);
}
if(!(fh1 = fopen(argv[1], "r"))) {
printf("cannot open %s\n",argv[1]); return(2);
}
if(!(fh2 = fopen(argv[2], "r"))) {
printf("cannot open %s\n",argv[2]); return(3);
}
if(argc>3) {
if(!(fh3 = fopen(argv[3], "w+"))) {
printf("cannot open %s\n",argv[3]); return(4);
}
}
fseek(fh1, 0, SEEK_END);
size1 = ftell(fh1);//Getting fh1 size
fseek(fh1, 0, SEEK_SET);
fseek(fh2, 0, SEEK_END);
size2 = ftell(fh2);//Getting fh2 size
fseek(fh2, 0, SEEK_SET);
char* readText(int, FILE*);//declaring function
char *text1 = readText(size1, fh1);
int i;
for (i=0; i<size1; i++)
printf("text1[%d] = %s\n", i, text1[i]);
return 0;
}
char *readText(int size, FILE *fh)//reads file into a dynamically allocated array
{
char * text = malloc(size * sizeof(char));
int i=0;
while(!(feof(fh)))
{
fgets(text, size, fh);
++i;
}
return text;
}
答案 0 :(得分:2)
text1[i]
不是字符串,只是一个字符。 %s
期望指向字符串开头的指针,因此您需要
printf( "text[%d] = %c\n", i, text1[i] );
答案 1 :(得分:0)
由于%s
说明符需要类型为char*
的参数,因此这些行:
for (i=0; i<size1; i++)
printf("text1[%d] = %s\n", i, text1[i]);
将text1
视为一个字符串数组,分别为char* []
或char**
。
但text1
仅为char*
,因此您可以使用%c
打印一个字符:
printf("text1[%d] = %c\n", i, text1[i]);