Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:函数调用不同模块后传递的参数为NULL的原因_C_Null_Callstack - Fatal编程技术网

C:函数调用不同模块后传递的参数为NULL的原因

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。 无论我使用哪种类型作为最后一个参数,也不管我从何处调用此函数(

我在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。 无论我使用哪种类型作为最后一个参数,也不管我从何处调用此函数(即使是在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。