Tag: sizeof

我是否有sizeof(type)== sizeof(无符号类型)的保证?

sizeof char,int,long double ……可能因编译器而异。 但是,根据C ++ 11或C11标准,我是否有任何有符号和无符号基本积分类型的大小相同的保证?

在C中使用sizeof()运算符时出现奇怪的情况

我正在使用以下代码测试在C / C ++中使用sizeof运算符: #include /* Character types */ #include /* Standard buffered input/output */ #include /* Standard library functions */ #include /* String operations */ #include /* Data types */ #include /* Declarations for waiting */ #include void main() { char a[100]; char *des = malloc(100*sizeof(char)); strcpy(des,”abcded\0″); printf(“%d\n”,sizeof(des)); printf(“%d\n”,sizeof(a)); free(des); } 为什么这个程序输出: 4 100 […]

为什么sizeof字符常量是4个字节?

下面的程序产生 输出 – 1 4 4 #include void main() { char ch; ch=’A’; printf(“%d %d %d\n”,sizeof(ch),sizeof(‘A’),sizeof(3.2f)); } 为什么字符常量的大小是4个字节?

为什么sizeof(指针)返回不正确的值?

可能重复: Sizeof字符串文字 在我的windows7 mingw环境中,我试过这个: char str[] = “hello”; sizeof(str)的值是6,而不是4或8。 怎么会发生这种情况?

对于以null结尾的字符串,strlen有时等于sizeof

我知道strlen计算直到(并排除)空字符’\0′ (或0 )的字符数,并且sizeof给出了存储字符串所需的空间量,包括空字符,但与输出混淆我的代码 题: 我希望strlen的结果始终比sizeof的结果小1,因为我的字符串是以null结尾的,但只有长度为4和8的字符串似乎是这种情况,不包括’\ 0’(即第3个字符串)以及第5个结果)。 我怀疑在第一,第二和第三结果的字符串末尾打印垃圾的原因相同。 有人可以解释这种行为吗? 我读了这个相关的问题,但我不认为这就是这里发生的事情: strlen – 字符串的长度有时会增加1 。 代码的作用: 在main ,它创建一个整数make_and_print_msgs和8的数组。然后对于每个长度,它调用函数make_and_print_msgs : 创建一个长度为+ 1的字符串(对于空字符),例如,对于长度为4,创建字符串“aaaa \ 0” 使用printf %c逐字母打印消息 使用printf %s其打印为字符串 找到字符串的strlen 找到字符串的sizeof 输出: i data_length[i] ——————– 0 0 msg intended to be: msg printed as string: strlen(msg): 1 sizeof(msg): 1 1 2 msg intended to be: aa msg printed as […]

使用指针知道数组的大小

如何使用malloc分配的指针知道数组的大小? #include int main(){ int *ptr = (int *)malloc(sizeof(int * 10)); printf(“Size:%d”,sizeof(ptr)); free(ptr_one); return 0; } 在这种情况下,我只得到指针的大小,即8.如何修改代码以获得40的数组大小。

从Ruby确定sizeof(double)和sizeof(int)的最简单方法?

要使用Ruby的String.unpack解压缩具有混合双精度和整数的复杂二进制字符串,我需要确定二进制字符串中的偏移量。 通常,双精度数是8个字节,整数是4个字节,但为了使我的代码与机器无关,我想从我的Ruby代码中查询这些大小。 从Ruby中确定整数和双精度大小的最简单方法是什么,即请求对C的sizeof( type )方法的请求的响应?

解释包含结构的联合的sizeof运算符的结果

#include struct mystruct { char cc; float abc; }; union sample { int a; float b; char c; double d; struct mystruct s1; }; int main() { union sample u1; int k; u1.s1.abc=5.5; u1.s1.cc=’a’; printf(“\n%c %f\n”,u1.s1.cc,u1.s1.abc); k=sizeof(union sample); printf(“%d\n\n”,k); return 0; } 运算符的大小返回8我仍然能够访问结构元素,一次多个,并且sizeof运算符仍然返回我假设的原始数据类型的最大大小。 为什么会这样? 实际分配的大小是8吗? 并且sizeof返回错误的值? 或者实际分配的大小是8 ? 那么结构是如何适应的? 如果我们使用malloc和sizeof分配一个联合数组,它会在这种情况下分配足够的空间吗? 请详细说明。

char指针作为函数参数

我有一个具有char *参数的函数A. 在A() ,我使用sizeof来计算buf的大小,但我在i686机器中得到8,在armel机器上得到4。 为什么不是128? 摘录如下: void A(char *p) { printf(“sizeof p is %d\n”, sizeof(p)); } int main(void) { char buf[128]; printf(“sizeof buf is %d\n”, sizeof(buf)); A(buf); return 0; } 结果是这样的(在i686中): sizeof buf is 128 sizeof p is 8 请告诉我原因。

当数组为空时,ARRAY_SIZE是否返回未定义的行为?

当数组为空时,ARRAY_SIZE是否返回未定义的行为? 因为我们做了一个不存在的sizeof((X)[0]) #include #include #include #ifndef ARRAY_SIZE #define ARRAY_SIZE(X) sizeof((X))/sizeof((X)[0]) #endif struct ka { int a; int b; }; int main(void) { struct ka k[] = {}; printf(“%d\n”, ARRAY_SIZE(k)); }