我有个大问题。我编写了一个静态库,该库是我想在软件中使用的库。我的问题是:如果您将某个函数的指针从库中提供回主程序,则该指针没有库中指针的值。如果将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;
}
[...]
最佳答案
可以从库中将指针返回到您的静态缓冲区。它与程序的其余部分位于相同的地址空间中。当然,它不是线程安全的,但这是一个单独的问题。
真正的问题是调用方式:
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 );
关于c - 给图书馆指点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34166101/