C# では、次のようにします。
private long[] myMethodName()
{
//etc
}
Cで同等のものは何ですか?
これによりエラーが発生します。
long[] readSeqFile(char *fileName)
C# では、次のようにします。
private long[] myMethodName()
{
//etc
}
Cで同等のものは何ですか?
これによりエラーが発生します。
long[] readSeqFile(char *fileName)
long *readSeqFile(char *filename);
filename
constを作成したい場合があります。
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()
通常、Cの場合、ポインターと長さを渡します
// returns number of elements written
size_t myMethodName(long* dest, size_t len)
{
//etc
}
C では、関数は配列型を返すことができません。次のように、配列へのポインターを返すことができます。
long (*readSeqFile(char *filename))[N]
{
...
}
欠点は、C89 以前のコンパイラ、または可変長配列をサポートしない C2011 コンパイラを使用している場合、N をコンパイル時の定数にする必要があることです。事前にアレイのサイズが不明な場合は、おそらくこの方法を使用したくないでしょう。
気にしない..私はそれを手に入れました:
long *readSeqFile(char *fileName)
とにかくありがとう