Tag: sizeof

memcpy(),size参数的值应该是多少?

我想将一个int数组复制到另一个int数组。 它们使用相同的长度定义,因此它们的长度始终相同。 memcpy()的size参数的以下两个替代方案的优缺点是什么? memcpy(dst, src, ARRAY_LENGTH*sizeof(int)); 要么 memcpy(dst, src, sizeof(dst)); 第二种选择总能奏效吗? 无论内容如何? 有利于最后一个的一件事是,如果arrays要改变,那么更新memcpy()会有一些内容。 谢谢

C和C ++中的整数/算术类型的大小保证

我知道C ++标准明确地保证了char , signed char和unsigned char 。 此外,它还提供了保证,例如, short至少与char , int和short等一样大。但是没有明确保证绝对值,比如sizeof(int) 。 这是我头脑中的信息,我和它幸福地生活在一起。 不久前,我在SO中找到了一条评论(找不到它),在C long中保证至少有4个字节,并且该要求是由C ++“inheritance”的。 是这样的吗? 如果是这样,我们对C ++中算术类型的大小有什么其他的隐含保证? 请注意,我对这个问题中不同平台的实际保证完全不感兴趣,只是理论上的保证。

如何在C中编译时打印sizeof()的结果?

如何在C中编译时打印sizeof()的结果? 现在我使用静态断言(基于其他Web资源自制)来将sizeof()结果与各种常量进行比较。 虽然这有效但它远非优雅或快速。 我还可以创建变量/ struct的实例并查看映射文件,但这也比直接调用/命令/运算符更不优雅和快速。 此外,这是一个使用多个交叉编译器的嵌入式项目……因此,为目标构建和加载示例程序然后读出一个值比上述任何一个都更麻烦。 在我的情况下(旧的GCC), #warning sizeof(MyStruct) )在打印警告之前实际上并不解释sizeof()。

C sizeof char *数组

我有一个char*数组如下: char *tbl[] = { “1”, “2”, “3” }; 如何使用sizeof运算符来获取数组的元素数量,这里是3? 下面的确有效,但是它是否正确? int n = sizeof(tbl) / sizeof(tbl[0])

sizeof(函数(参数))返回什么?

什么是程序的输出 #include int fun(char *a){ printf(“%d\n”,sizeof(a)); return 1; } int main(){ char a[20]; printf(“%d\n”,sizeof (fun(a))); return 0; }

C / C ++中sizeof()的机制是什么?

看来sizeof不是真正的function吗? 例如,如果你这样写: int i=0; printf(“%d\n”, sizeof(++i)); printf(“%d\n”, i); 你可能得到如下输出: 4 0 当你深入研究汇编代码时,你会发现这样的: movl $4, %esi leaq LC0(%rip), %rdi xorl %eax, %eax call _printf 因此,编译器直接将常量“4”作为printf的参数添加调用它。 那尺寸做什么呢?

在确定数组的大小时,括号是否有所作为?

以下程序在gcc 4.8.2上两次打印相同的数字: #include int main() { char a[13]; printf(“sizeof a is %zu\n”, sizeof a ); printf(“sizeof(a) is %zu\n”, sizeof(a)); } 根据这个redditpost ,gcc在这方面不符合标准,因为当数组到指针衰减没有发生时,括号表达式不在exception列表中。 这家伙是对的吗? 这是相关的标准报价: 除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化字符数组数组的字符串文字,或者是用于初始化元素类型与wchar_t兼容的数组的宽字符串文字,具有“数组类型”类型的左值将转换为具有“指向类型的指针”类型的表达式,该类型指向数组对象的初始成员且不是左值。 为了清楚起见,他认为(a)应该触发数组到指针的衰减,因为上面的列表中没有括号括起来( sizeof运算符,一元&运算符,字符串文字作为初始值)。

获取指针数据的大小

我尝试了以下代码,以了解如何获取指针数据的大小: #include #include #include int main(){ char *test_char_ptr = “This is just a test”; int *test_int_ptr = (int *) malloc(16*sizeof(int)); for(int i = 0; i<16; i++){ test_int_ptr[i] = i; } printf("%s\n",test_char_ptr); printf("Test char 1: %d\n", (int)sizeof test_char_ptr ); printf("Test char 2:%d\n", (int)sizeof *test_char_ptr ); printf("Test char 3: %d\n", (int)((strlen(test_char_ptr)+1) * sizeof(char))); printf("Test int 1:%d\n", (int)sizeof […]

C结构大小不一致

可能重复: 如何找到结构的大小? 结构的内存大小不同? 我正在使用以下结构进行网络通信,它在两者之间创建了许多不必要的字节。 它给出了与预期的8字节不同的大小。 struct HttpPacket { unsigned char x1; union { struct { unsigned char len; unsigned short host; unsigned char content[4]; } packet; unsigned char bytes[7]; unsigned long num; } 并且以下给出了不同的大小,即使我从联合中删除了一个字段 struct HttpPacket { unsigned char x1; union { struct { unsigned char len; unsigned short host; unsigned char content[4]; } packet; […]

在C中获取指针的大小

如何使用sizeof在C中获取指针的sizeof ? 我想malloc一些内存来存储指针(而不是指向的值)。