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

标签 c arrays c-strings

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

相关文章:

c - 使用 strcpy 时打印垃圾

javascript - 我的嵌套数组不会在 javascript 中打印

c - 如何在 C 中打印带有计数的字符串中的重复字母?

javascript - 更改按钮数组中按钮的文本 jQuery

c++ - 我必须使用哪种 C 数据类型?

c - 从字符串中读取数字数组

c++ - std::string 可以包含嵌入的空值吗?

对如何 hell 般地打印数组感到困惑

无法理解代码片段

c - C 中的格式字符串不使用数据参数