我有一个大问题。我编写了一个静态库,我想在软件中使用它。我的问题是:如果您将库外函数的指针返回给主程序,则该指针没有库中指针的值。如果您将指针从 Libay.a 返回到 main.c,是否有问题
主.c:
#include <stdio.h>
int main(int argc, const char * argv[]) {
char *ptr;
Prallow_its(ptr, 122);
printf("%s", ptr);
return 0;
}
Prallow.c 来自 Prallow.a
[...]
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 );
或者,您可以允许 Prallow_its
修改 ptr
。在这种情况下,它必须这样定义:
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/