我需要以一种干净的方式从第 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/