private long[] myMethodName()
{
//etc
}
C中的等价物是什么?
这会出错:
long[] readSeqFile(char *fileName)
答案 0 :(得分:1)
long *readSeqFile(char *filename);
您可能想要filename
const:
long *readFileName(const char *const filename);
更新:虽然这回答了原始问题,但这并不是很好的C练习。如果正如海报所说,他想从一个文件中读取一个整数列表并将其作为一个长数组返回,那么原型可能看起来像这样:
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()
就可以获得{{1}},而不必担心记忆管理。
答案 1 :(得分:1)
通常对于C,您将传递指针和长度
// returns number of elements written
size_t myMethodName(long* dest, size_t len)
{
//etc
}
答案 2 :(得分:0)
没关系..我明白了:
long *readSeqFile(char *fileName)
非常感谢
答案 3 :(得分:0)
在C中,函数不能返回数组类型;他们可以将指针返回到数组,例如
long (*readSeqFile(char *filename))[N]
{
...
}
缺点是,如果您使用的是C89或更早版本的编译器,或者不支持可变长度数组的C2011编译器,则N必须是编译时常量。如果您不知道数组应该提前有多大,那么可能不想走这条路。