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

没关系..我明白了:

long *readSeqFile(char *fileName)

不管怎么说,还是要谢谢你

于 2012-07-18T14:04:30.173 回答
0

在 C 中,函数不能返回数组类型;它们可以返回指向数组的指针,例如

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

缺点是如果您使用的是 C89 或更早版本的编译器,或者不支持可变长度数组的 C2011 编译器,则 N 必须是编译时间常数。如果您不知道阵列应该提前多大,您可能不想走这条路。

于 2012-07-18T15:55:15.823 回答