我需要存儲每個數組元素—兩個項目char
兩個數組,其中可能包含空字節—,然後仍然能夠使用sizeof()
來獲得它們的長度。由於這些值在執行過程中不會改變,我認爲GCC應該能夠處理這個問題。C - sizeof()靜態字符數組內的數組 - 不可能?
下面的代碼:
#include <stdlib.h>
#include <stdio.h>
struct name_data {
char *name;
char *data;
} name_bins [] = {
{ "John", "\xAA\xAA\x00\xAA" },
{ "Mark", "\xFF\x0A\x00\x33\x01\x01\x03\x04\x04\x05" },
};
char bin_test[] = "\xFF\x0A\x00\x33\x01\x01\x03\x04\x04\x05";
int main() {
printf("sizeof(bin_test) = %lu\n", sizeof(bin_test));
printf("sizeof(name_bins[1].data) = %lu\n", sizeof(name_bins[1].data));
exit(0);
}
此代碼的輸出是:
sizeof(bin_test) = 11
sizeof(name_bins[1].data) = 8
然而,bin_test
相當於name_bins[1].data
在內容—雖然類型定義是不同— bin_test
是char[]
和names_bins[1].data
是char*
。
有沒有辦法用char[]
s來定義name_bins
數組? 有沒有辦法強制GCC將此值識別爲靜態常量,並返回實際內容大小與sizeof()
—,它已經在編譯時計算出來了?
如果您char'的'陣列可能包含空字節,可以考慮將其定義爲uint8_t'的'爲了清晰的數組。大多數C程序員認爲'char *'是一個指向空終止字符串的指針。 – tomlogic