在c中打印数组时发生分段错误

时间:2013-10-30 22:55:46

标签: c arrays memory-management segmentation-fault printf

打印动态分配的数组时出现分段错误。我不熟悉动态分配的数组,所以这可能是个问题。如果我注释掉我正在打印数组的每个元素的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;
}

2 个答案:

答案 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]);