C API函数是否应该分配其输出,或者让用户指定输出缓冲区?例如:
更具体地说,我想知道为什么Win32 API主要使用第二种情况(例如GetWindowText,LookupAccountSid)。如果API函数知道输出的大小,为什么用户要试图猜测输出大小呢?我找不到任何关于为什么使用第二种情况的信息。
另外:LookupAccountSid示例特别糟糕。在内部,它使用LSA API为调用者分配输出。然后,在LookupAccountSid中,当它可以直接从LSA返回输出时,它让用户分配缓冲区(并猜测正确的缓冲区大小)!为什么?
BOOL GetString(
PWSTR *String
);
...
PWSTR string;
GetString(&string);
Free(string);
对比
BOOL GetString(
PWSTR Buffer,
ULONG BufferSize,
PULONG RequiredBufferSize
);
...
// A lot more code than in the first case
更具体地说,我想知道为什么Win32 API主要使用第二种情况(例如GetWindowText,LookupAccountSid)。如果API函数知道输出的大小,为什么用户要试图猜测输出大小呢?我找不到任何关于为什么使用第二种情况的信息。
另外:LookupAccountSid示例特别糟糕。在内部,它使用LSA API为调用者分配输出。然后,在LookupAccountSid中,当它可以直接从LSA返回输出时,它让用户分配缓冲区(并猜测正确的缓冲区大小)!为什么?