最近,我一直在重新编写自己的printf
函数,并使用 Criterion C 库进行单元测试。
当我尝试测试%p
标志(打印指针的地址)时,我只是被困在那里试图弄清楚如何预测我将拥有的内存地址。
我不确定是否可以在标准开始测试之前“提取”它并将其发送到断言中,但似乎没有关于指针、内存地址或文档中任何相关内容的内容。
对于 nil 指针,我可以预测结果(“nil”字符串),例如:
Test(my_printf, nil_pointer, .init=cr_redirect_stdout)
{
char *string = NULL;
my_printf("This is a nil %p.", string);
cr_assert_stdout_eq_str("This is a nil (nil).");
}
但是对于一个未知的未来内存地址,我只是坚持:
Test(my_printf, pointer_address_1, .init=cr_redirect_stdout)
{
char *string = "hello world";
my_printf("valid pointer: %p.", string);
cr_assert_stdout_eq_str("valid pointer: 0x???????");
}
我想知道是否有办法在测试期间预测/将指针的地址发送到我的断言中,而不是问号。
我不知道我是否很清楚,如果没有,请告诉我,以便我帮助您理解我的问题。