在函数返回的指针处打印值

时间:2015-07-02 11:55:03

标签: c static

我试图通过以下方式从其他文件访问静态变量。 你能帮忙打印变量' c'在file1.c。

找到下面的代码

FILE1.C

void main(void)
{
    int m;
    m=func_ret();
    printf("\n m = %d\n",m);
}

file2.c中

static int c =5;
int *func_ret(void)
{
    printf("\n c = [%d]\n",c);
    return &c;
}

2 个答案:

答案 0 :(得分:4)

这里的问题是,您从func_ret()返回一个指针,然后尝试捕获int变量中的返回值,然后尝试使用%d打印该值。它主要调用undefined behaviour

供参考,C11,章节§6.3.2.3

  

任何指针类型都可以转换为整数类型。除了之前指定的以外,结果是实现定义的。如果结果无法以整数类型表示,则行为未定义。结果不必在任何整数类型的值范围内。

解决方案:您需要将m的类型从int更改为int *。您还必须使用适当的格式说明符。

另请注意,main()的推荐签名为int main(void)

答案 1 :(得分:3)

将您的file1.c更改为:

#include <stdio.h>

extern int *func_ret(void);

int main(void)
{
    int *m = 0;
    m=func_ret();
    printf("\n m = %d\n",*m);
    //some code
    return 0;
}

file2.c来:

#include <stdio.h>

static int c = 5;
int *func_ret(void)
{
    printf("\n c = [%d]\n",c);
    return &c;
}

此外,您应养成使用int main(void)代替void main()的习惯。 由于那部分不在这个问题的范围内,而不是详细地写下它,我将分享相关问题的链接:
int main(void) vs void main()和,
Why do we need to use int main and not void main in C++?