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


或者,您可以允许ptrPrallow_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/

10-10 17:02