C:函数调用不同模块后传递的参数为NULL的原因
我在C程序中有一种奇怪的行为。我将几个参数传递给名为foo.c的文件中具有以下签名的函数:C:函数调用不同模块后传递的参数为NULL的原因,c,null,callstack,C,Null,Callstack,我在C程序中有一种奇怪的行为。我将几个参数传递给名为foo.c的文件中具有以下签名的函数: foo (char *first, size_t a, size_t b, size_t c, char *last); 现在,当我从另一个包含foo.h的C文件调用此函数时,例如: foo("first value", 1, 2, 3, "last value"); 在foo-first中,a、b、c是正确的,但last始终为NULL。 无论我使用哪种类型作为最后一个参数,也不管我从何处调用此函数(
foo (char *first, size_t a, size_t b, size_t c, char *last);
现在,当我从另一个包含foo.h的C文件调用此函数时,例如:
foo("first value", 1, 2, 3, "last value");
在foo-first中,a、b、c是正确的,但last始终为NULL。
无论我使用哪种类型作为最后一个参数,也不管我从何处调用此函数(即使是在main中直接调用,也不需要任何以前的操作)。
这些文件被编译并链接在一个可执行文件中。
当我将foo()放在同一个源文件中时,它被称为万事俱备
有人知道函数外包时最后一个参数为NULL的原因吗?没有看到代码,我猜您的函数声明(在标题中)与定义(在源文件中)不一致。感谢您的快速响应 利特的暗示是正确的。在另一个头文件中,重新定义了未包含大小的头文件。因此,基本上一个源文件使用32位数据类型,另一个使用64位数据类型
(无法发布任何代码,因为客户对此有点讨厌)foo.h中的签名是什么?显示您的代码。为什么你认为最后一个是空的?您似乎在传递一个文本。您是否确保foo.h中的函数原型是正确的?我怀疑您声明了类似void foo(char*,int,int,int,char*)的内容;并且是64位的,sizeof(int)!=sizeof(size\u t)。或者你完全没有原型就编译了。。。你能给codez看吗?是的,多看些代码。此外,编译时所有警告都处于打开状态。如果您使用的是gcc,我建议您也使用-ansi。