1

我在 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 的原因可能是什么?

4

2 回答 2

2

如果没有看到代码,我的猜测是您的函数声明(在标题中)与定义(在源文件中)不符。

于 2009-04-29T15:35:45.357 回答
0

感谢您的快速回复,

litb 的提示是正确的。在另一个头文件中,我错过了重新定义包含 size_t 的内容。所以基本上一个源文件使用 32 位,另一个使用 64 位 size_t 数据类型。

(无法发布任何代码,因为客户对此有点讨厌)

于 2009-04-29T15:47:36.437 回答