使用char指针加载文件,C

时间:2013-12-13 04:48:47

标签: c pointers

所以我有这个应该读取文件的函数:

int lerCoordenadasFich( char bairroCoord[ ][ COLUNAS ][ 50 ], int linhas,
                        char *fichIn ) {

   int contaLinhas;
   int contaColunas;
   FILE *fichIn;

   if( ( fichIn = fopen( "bairro-coordenadas.txt", "r" ) ) == NULL ) {
      printf( "Nao foi possivel abrir o ficheiro.\n" );
      return 0;
   }
   else {
      for( contaLinhas=0; contaLinhas < linhas; contaLinhas++) {
         for( contaColunas=0; contaColunas < COLUNAS; contaColunas++) {
            fscanf( fichIn,"%s", bairroCoord[contaLinhas][contaColunas]);
         }
      }

      fclose(fichIn);
      return 1;
   }
}

但是我收到了错误:

'fichIn'重新宣布为另一种符号

我真的需要将它声明为来自main的char,但是......我怎么能解决这个问题呢?

4 个答案:

答案 0 :(得分:2)

将它声明两次,一次作为参数列表中的char *fichIn,然后再作为FILE *fichIn。只需重命名其中一个。

答案 1 :(得分:2)

因为你的函数有两个名为finchIn的变量。一个位于您的函数参数中,另一个是FILE * fichIn。

gcc -g -o q.o -c q.c
q.c: In function ‘lerCoordenadasFich’:
q.c:10:10: error: ‘fichIn’ redeclared as different kind of symbol
q.c:6:31: note: previous definition of ‘fichIn’ was here

答案 2 :(得分:1)

你有

int lerCoordenadasFich( char bairroCoord[ ][ COLUNAS ][ 50 ], int linhas,
                        char *fichIn ) {

即。 fichIn

然后

FILE *fichIn;

即。另一个

重命名其中一个!

答案 3 :(得分:0)

您说您需要传递文件的名称 - 但您已在代码中硬编码文件名。解决这两点,您需要更改代码如下(我已经引入了一个新变量fp并更新了fopen函数):

int lerCoordenadasFich( char bairroCoord[ ][ COLUNAS ][ 50 ], int linhas,
                    char *fichIn ) {

int contaLinhas;
int contaColunas;
FILE *fp;

if( ( fp = fopen( fichIn, "r" ) ) == NULL ) {
    printf( "Nao foi possivel abrir o ficheiro.\n" );
    return 0;
   }
   else {
      for( contaLinhas=0; contaLinhas < linhas; contaLinhas++) {
         for( contaColunas=0; contaColunas < COLUNAS; contaColunas++) {
            fscanf( fp, "%s", bairroCoord[contaLinhas][contaColunas]);
         }
      }

      fclose(fp);
      return 1;
   }
}