c - 从图书馆给出指针

标签 c pointers static-libraries

我有一个大问题。我编写了一个静态库,我想在软件中使用它。我的问题是:如果您将库外函数的指针返回给主程序,则该指针没有库中指针的值。如果您将指针从 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/

相关文章:

c - 返回 0 时发出 SIGABRT 信号

c - 函数结束后如何 "free"变量?

在函数c中更改数组

iphone - 静态库中字符串的本地化

gcc - 构建 R 包时如何链接静态库

c++ - 从 Matlab 运行 exe 代码。在 cmd (dos) 中工作的完全相同的指令在 Matlab 中失败

c++ - 当 C/C++ 中的数字常量以 0 为前缀时,这意味着什么?

c - 在 C 中运行时解析 float 的标准方法是什么?

c - 如何在 C 中编写 for 循环

java - 无法编辑外部库文件 - 在 Android Studio 中显示为锁定