如何在 C 中打印函数指针的值?
How to print values of function pointer in C?
我有一个指向返回 const char 指针的函数的指针。我的问题是如何打印指针,然后打印指针引用的对象(字符串本身)。
代码如下:
#include <stdio.h>
char const *func(void)
{
printf("Printed func string.\n");
return "Pointed func string.\n";
}
int main(void) {
char const *(*fp)(void) = func;
/*print statements here*/
return 0;
}
我遇到了 ISO C forbids conversion of function pointer to object pointer type
或一些未定义的行为。
编辑:
int main(void) {
char const *(*fp)(void) = func;
unsigned char *p = (unsigned char *)&fp;
/*print statements here*/
printf("The: %p\n",(char *) p);
return 0;
}
输出:0x7fff36753500
不正确。
char const *(*fp)(void) = func;
在这里,您只是将 func
分配给函数指针。您需要调用它来获取函数返回的字符串。
char const *(*fp)(void) = func;
const char *p = fp();
printf("In main: %s", p);
这就是您打印字符串的方式。没有用于打印函数指针的标准格式说明符。 %p
仅适用于数据指针,不适用于函数指针。所以使用 %p
打印函数指针是 undefined behaviour.
如果你真的需要打印函数指针,那么将其转换为字符指针并打印它们:
unsigned char *cp = (unsigned char*)&fp;
for(i=0;i<sizeof fp; i++) {
printf("[%08x]", cp[i]);
}
之所以可行,是因为允许将任何对象转换为字符指针(char*
、unsigned char*
或 signed char*
)。它打印的是实现定义的格式(就像 %p
)。
我有一个指向返回 const char 指针的函数的指针。我的问题是如何打印指针,然后打印指针引用的对象(字符串本身)。
代码如下:
#include <stdio.h>
char const *func(void)
{
printf("Printed func string.\n");
return "Pointed func string.\n";
}
int main(void) {
char const *(*fp)(void) = func;
/*print statements here*/
return 0;
}
我遇到了 ISO C forbids conversion of function pointer to object pointer type
或一些未定义的行为。
编辑:
int main(void) {
char const *(*fp)(void) = func;
unsigned char *p = (unsigned char *)&fp;
/*print statements here*/
printf("The: %p\n",(char *) p);
return 0;
}
输出:0x7fff36753500
不正确。
char const *(*fp)(void) = func;
在这里,您只是将 func
分配给函数指针。您需要调用它来获取函数返回的字符串。
char const *(*fp)(void) = func;
const char *p = fp();
printf("In main: %s", p);
这就是您打印字符串的方式。没有用于打印函数指针的标准格式说明符。 %p
仅适用于数据指针,不适用于函数指针。所以使用 %p
打印函数指针是 undefined behaviour.
如果你真的需要打印函数指针,那么将其转换为字符指针并打印它们:
unsigned char *cp = (unsigned char*)&fp;
for(i=0;i<sizeof fp; i++) {
printf("[%08x]", cp[i]);
}
之所以可行,是因为允许将任何对象转换为字符指针(char*
、unsigned char*
或 signed char*
)。它打印的是实现定义的格式(就像 %p
)。