我是个大问题。我写了一个静态库,我想在软件中使用它。我的问题是:如果你将一个函数指针从库中返回到主程序,那么指针就没有来自库中指针的值。如果你将Libay.a的指针返回给main.c
,是否存在问题MAIN.C:
#include <stdio.h>
int main(int argc, const char * argv[]) {
char *ptr;
Prallow_its(ptr, 122);
printf("%s", ptr);
return 0;
}
来自Prallow.a的Prallow.c
[...]
char *Prallow_its(char *ptr, int i){
static char buffer[255];
sprintf(buffer, "%u", i);
ptr = buffer;
return ptr;
}
[...]
答案 0 :(得分:1)
可以从库中返回指向静态缓冲区的指针。它与您程序的其余部分位于相同的地址空间中。当然,它不是线程安全的,但这是一个单独的问题。
真正的问题是你打电话的方式:
char *ptr; // <-- ptr uninitialised
Prallow_its(ptr, 122); // <-- return value ignored
printf("%c", ptr); // <-- ptr still uninitialised
你应该这样做:
ptr = Prallow_its( ptr, 122 );
或者,您可以允许ptr
修改Prallow_its
。在这种情况下,必须这样定义:
char *Prallow_its( char **ptr, int i )
{
static char buffer[255];
sprintf(buffer, "%u", i);
*ptr = buffer;
return *ptr;
}
并且这样称呼:
Prallow_its( &ptr, 122 );
答案 1 :(得分:0)
C按值传递,因此库函数中的行ptr = buffer
执行不更改ptr
中main
的值。
此外,库函数对传入的指针没有任何作用,因此没有理由传递指针。 Main.c中的代码应为
int main(int argc, const char * argv[])
{
char *ptr = Prallow_its(122);
printf("%s", ptr);
return 0;
}
并且Prallow.c中的代码应该是
char *Prallow_its(int i)
{
static char buffer[255];
sprintf(buffer, "%u", i);
return buffer;
}