(C / C ++)字符数组的大小

时间:2012-01-08 17:58:43

标签: c++ c arrays

如何找出非终止/零终止或类似的字符数组的长度?

因为我写了一个writeFile函数,我想摆脱那个'len'参数。

int writeFile(FILE * handle, char * data, int len)
{
    fseek(handle, 0, SEEK_SET);
    for(int i=0; i <= len; i++)
        fputc(data[i], handle);
}

5 个答案:

答案 0 :(得分:3)

你无法摆脱len参数。计算机并不是猜测你的意图的神谕。但是,您可以使用fwrite()函数,该函数可以比fputc()更有效地编写数据。

答案 1 :(得分:1)

没有可移植方式*,这就是使用像null终结符这样的标记值的原因。

事实上,最好指定一个长度参数,因为它允许从数据缓冲区进行部分写入(尽管在你的情况下我会使用size_t / std::size_t作为长度)。

*您可以尝试在Windows上使用_msize,但这会导致眼泪。

答案 2 :(得分:0)

#define writeFile(handle, data) writeFileImpl(handle, data, sizeof data)

答案 3 :(得分:0)

正如Seith Carnegie评论和其他人回答的那样,你不能这样做(获得任何 char数组的长度)。

某些C库为您提供了一个扩展,它给出了堆分配内存长度的(超大)估计值(例如malloc获得的指针)。

如果您使用Boehm's garbage collector(这非常有用!),它会在<gc/gc.h>中为您提供GC_size功能。

但是当char数组在结构内部或调用堆栈中时,无法在运行时获取其大小。只有你的程序知道它。

答案 4 :(得分:0)

除非您有另一种确定数据长度的方法(通常使用空终止符),否则您无法删除len参数。这是因为C和C ++不存储数据的长度。此外,程序员可能会欣赏len参数。您并不总是想要写出数组中的所有字节。