如何在其他函数中使用sizeof(来自指针)?

时间:2016-04-06 09:25:53

标签: c pointers memory

让我们举个例子。我有一个主文件:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "otherfile.h"

char output[1024*10];

int main(){

    writeSomething(output);

    return 0;
}

和另一个具有以下功能的文件:

void writeSomething(char *o){
    printf("sizeof(o)=%d", sizeof(o));
    //code
    memset(o,0,sizeof(o));
    // code
}

在编译时,我收到了警告:

  'memset'调用中'sizeof'的参数与表达式相同   目的地;你的意思是提供明确的长度吗?

我想要的是在我的函数中将整个output数组设置为0,因此所有1024 * 10字节。但是因为我将它作为指针传递,它只会将前8个字符设置为0(因为sizeof(o)=8)。

如何通过指针对整个数组进行memset?这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

问题在于,当作为参数传递给函数时,数组会衰减成指针,并且有关其大小的信息会丢失。

将功能重新定义为

void writeSomething(char *o, size_t sz){
    printf("sizeof(o)=%d", sizeof(char) * sz);
    //code
    memset(o, 0, sizeof(char) * sz);
    // code
}

以便对它的调用看起来像writeSomething(output, 1024*10);

正如评论中所指出的,C99标准要求sizeof(char)1,因此可以省略我提供的代码中的sizeof(char)。但是,出于风格原因,我宁愿把它留在那里。