gpt4 book ai didi

c - 填充作为 C 中的参数传递的固定大小的预分配字符串

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:39 24 4
gpt4 key购买 nike

我需要以一种干净的方式从第 3 方开发人员那里获得一个固定长度的名称,(希望)不需要在他们这边进行任何分配,并且由编译器检查。

我提供了这样一个原型(prototype):

void getName(char name[9]);

他们会写一个像这样的函数:

void getName(char name[9]) {
strncat(_name, "Hello World", 8);
}

然后我(在我这边)这样调用它:

char buf[9];
*buf = '\0';
getName(buf);
doSomethingWith(buf);

它编译并且似乎可以工作,但我不确定它是处理此问题的最佳方法。

有什么建议吗?

编辑:澄清一下,名称字符串用作打包二进制保存文件中的标识符。它需要恰好是 8 个 ASCII 8 位字符。

我现在想知道我是否应该只接收任何字符串并在我这边截断它。我希望编译器能提供帮助,而不是进行运行时检查。

最佳答案

在您的示例中,名称是静态字符串。在这种情况下,该函数可能如下所示,其中不需要额外的数据副本:

const char* getName(void)
{
return "Hello World";
}

...

const char* const pName = getName();

或者:

void getName(FUNCPTR func)
{
func("Hello World");
}

void func(const char* const pName) 是在你这边实现的。然后你也不需要分配/复制数据。

关于c - 填充作为 C 中的参数传递的固定大小的预分配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35405206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com