c++ - 函数返回char类型数组,调用 函数后如何接收值?
高洛峰
高洛峰 2017-04-17 15:24:13
0
3
787

我现在刚在学C语言,今天想要实现一个功能:

用C语言读取一个文件的指定行,(如读取a.log文件的3--5行),现在实现了读取函数, 但在main函数调用时不知道怎么接收返回的值。

代码如下:

#include <stdio.h>
/* 
读取a.log中第3行到第5行的内容 

*/

#define MAXLIN 100
#define FILENAME "a.log"
 

char* getFileRows(char* filename,int start_line, int end_line);


int main()
{  
    
    getFileRows(FILENAME,3,5);

  /*
  getFileRows 函数返回的是 data[3][100] 这种的char类型数组。
  getFileRows 函数返回的是char类型的数组, 我这里应该怎么定义变量,来接收返回值呢? 
  */
 
  
     

 return 1;    
}

/*
 读取文件, 读取 start_line 到 end_line 行之间的内容
*/
char* getFileRows(char* logfile,int start_line, int end_line)
{ 
    int k=0,i = 0 ; 
    int pos = 1;
    char c; 
    int line = end_line - start_line;
    char data[line][MAXLIN];
    FILE* fp = fopen(logfile,"r");
    
    if(fp == NULL){
         printf("FILE OPEN ERROR");
         getchar();
         exit(1);
    }  
    while(i<start_line && !feof(fp)){ 
       fseek(fp,pos,SEEK_SET);
       while( (c=fgetc(fp)) != NULL){
                   pos++; 
                   if(c == '\n'){ 
                    break;
                 } 
         } 
        i++;  
   } 
   
  for(k=0;k<=line;k++){
        fgets(data[k],MAXLIN,fp);   
  }   
   return data;   
}
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(3)
黄舟

関数内で宣言された配列を直接返さないでください。スタックは関数の終了後にリサイクルされます。または、fgets を使用したのと同じように、関数の外側でバッファーを定義し、バッファーと長さを関数パラメーターとして渡します。または、関数内で char メモリの一部を malloc し、内部で末尾 0 を書き込み、このアドレスを返し、使用後に外部で解放することもできます。もちろん、これは悪いプログラミング習慣です。その後、destroy 関数をカプセル化することもできます。使用し、返されたアドレスをパラメータとして渡し、get 関数で要求されたすべてのメモリを解放します。

いいねを押す +0
阿神

データはスタック上にあり、関数が戻るときにスタックはリサイクルされます。データにアクセスすると、予期しないエラーが発生します。

main 関数でデータを宣言し、パラメーターを介して getFileRows にデータを渡してデータを受け取ります。

いいねを押す +0
洪涛

データ配列は関数の外で宣言し、配列アドレスと配列長をパラメーターとして関数に渡し、データを関数内で読み取って保存する必要があります (配列名はポインターとして使用され、配列は関数内で宣言されなくなりました)

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート