0

C# では、次のようにします。

private long[] myMethodName()
{
    //etc
}

Cで同等のものは何ですか?

これによりエラーが発生します。

long[] readSeqFile(char *fileName)
4

4 に答える 4

1
long *readSeqFile(char *filename);

filenameconstを作成したい場合があります。

long *readFileName(const char *const filename);

更新:これは元の質問に答えますが、C の実践としてはあまり適切ではありません。投稿者が言うように、彼がファイルから整数のリストを読み取り、それを long の配列として取得したい場合、プロトタイプはおそらく次のようになります。

int readSeqFile(const char *const filename,long **longArray,size_t *const len);

および実装 (スケッチ形式):

#include <stdio.h>
#include <stdlib.h>

const size_t longArrayChunkSize=100;

int readSeqFile(const char *const filename,long **longArray, size_t *const len)
{
   FILE *fp;
   size_t nInts=0,curBufferLen;
   long tmp;

   fp=fopen(filename,"r");
   if(fp==NULL)
      return -1;

   *longArray=malloc(longArrayChunkSize*sizeof(long));
   if(*longArray==NULL)
      return -1;

   curBufferLen=longArrayChunkSize;

   // let's assume file is a list of integers, one per line
   while(read from file and !feof())
       {
       (scan line into tmp)
       longArray[nInts++]=tmp;
       if(nInts==curBufferLen)
          (realloc *longArray by longArrayChunkSize, increase curBufferLen)
       }

   *len=nInts;

   fclose(fp);

   return 0;
}

次のように呼び出します:result=readSeqFile(filename,&longArray,&arrayLen); longArrayは型long*であり、後で解放するのは呼び出し元の責任です。結果は、成功した場合はゼロ、エラーの場合は -1 です。

これは、メモリ管理について心配することなく、ファイルから出力される限り、C++ および STL クラスで勝つvector<long>ことができる場所です。push_back()

于 2012-07-18T14:04:08.720 に答える
1

通常、Cの場合、ポインターと長さを渡します

// returns number of elements written
size_t myMethodName(long* dest, size_t len)
{
    //etc
}
于 2012-07-18T14:04:54.107 に答える
0

C では、関数は配列型を返すことができません。次のように、配列へのポインターを返すことができます。

long (*readSeqFile(char *filename))[N]
{
  ...
}

欠点は、C89 以前のコンパイラ、または可変長配列をサポートしない C2011 コンパイラを使用している場合、N をコンパイル時の定数にする必要があることです。事前にアレイのサイズが不明な場合は、おそらくこの方法を使用したくないでしょう。

于 2012-07-18T15:55:15.823 に答える
0

気にしない..私はそれを手に入れました:

long *readSeqFile(char *fileName)

とにかくありがとう

于 2012-07-18T14:04:30.173 に答える