我需要從第三方開發人員以乾淨的方式獲得固定長度的名稱(希望)不需要任何分配,並且編譯器檢查得很好。填充預先分配的固定大小的字符串作爲參數傳入C
我提供的原型是這樣的:
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位字符。
我想知道現在是否應該只收到任何字符串並截斷它在我身邊。我希望編譯器能幫忙,而不是運行時檢查。
我期望一個名爲'getName'的函數來返回一些東西,而不是設置一些東西。我會把它稱爲'init_name'或'set_name'或其他東西。如果它是一個getter,我可以讓它返回一個新分配的(堆內存)'char *',或者返回一個'const char *'字符串常量 –
主要的注意事項是getName(char name [9])'不會確保'getName()'只能用9個字符的緩衝區來調用。 *任何*'char *'都將滿足編譯器,即使是未初始化的編譯器,也會導致無效的內存訪問。 – DevSolar
@DevSolar啊哈。那麼這是一個問題。它需要正好8個ASCII的汽車。它用作二進制保存文件中的標識符。 –