Tag: sizeof

返回错误的数组长度

可能重复: C编程语言中数组的大小? 我一直在摆弄C以便更好地熟悉它,并认为我可能偶然发现了一个我不确定如何解决的初始化/指针问题。 下面的程序是ROT13的一个实现,所以它需要一个输入字符串,并将每个字母移动13,从而得到密文。 我程序的输出显示正确的移位,但它不会超过4个字符,让我想知道sizeof是否被错误地使用。 任何其他建议都表示赞赏,我确信此时我已经搞砸了一些事情。 #include #include void encrypt(char *); int main(void){ char input[] = “fascs”; encrypt(input); return 0; } void encrypt(char *input){ char alphabet[] = “abcdefghijklmnopqrstuvwxyz”; printf(“Input: %s \n”, input); int inputCount = sizeof(input); printf(“Characters in Input: %i \n\n”, inputCount); //holds encrypted text char encryptedOutput[inputCount]; //Initialize counters int i, j = 0; // […]

具有条件(三元)表达式的运算符’sizeof’

当给出三元表达式时,我很难理解sizeof的行为。 #define STRING “a string” int main(int argc, char** argv) { int a = sizeof(argc > 1 ? STRING : “”); int b = sizeof(STRING); int c = sizeof(“”); printf(“%d\n” “%d\n” “%d\n”, a, b, c); return 0; } 在这个例子中(用gcc 4.4.3和4.7.2测试,用-std=c99编译),b是9(8个字符+隐式’\0′ ),c是1(隐式’\0′ )。 a,出于某种原因,是4 。 根据argc是否大于1,我希望a为9或1.我想也许字符串文字在传递给sizeof之前转换为指针,导致sizeof(char*)为4。 我尝试用char数组替换STRING和”” … char x[] = “”; char y[] = “a […]

包含位域的结构的大小

可能重复: 为什么structof sizeof不等于每个成员的sizeof总和? 我试图理解位域的概念。 但我无法找到CASE III中以下结构的大小为8个字节的原因。 案例I: struct B { unsigned char c; // +8 bits } b; 的sizeof(B); //输出:1(因为unsigned char在我的系统上占用1个字节) 案例II: struct B { unsigned b: 1; } b; sizeof(b); // Output: 4 (because unsigned takes 4 bytes on my system) 案例III: struct B { unsigned char c; // +8 bits unsigned b: 1; […]

为什么-2147483648在适合int时会自动提升为long?

#include int main() { printf(“%zu\n”, sizeof(-2147483648)); printf(“%zu\n”, sizeof(-2147483647-1)); return 0; } 上面的代码给出了输出(gcc): 8 4 为什么-2147483648在第一个 printf自动提升为long ,即使它可以适合int ? 此外,我在MinGW中尝试了同样的方法,它给出了输出: 4 4 有人可以解释一下发生了什么吗?

我如何返回我用malloc分配的指针的大小?

看这个例子! int main( int argc, char ** argv ) { int *ptr = malloc(100 * sizeof (int)); printf(“sizeof(array) is %d bytes\n”, sizeof(ptr)); } printf函数只返回4个字节! 怎么了? 非常感谢!!!

C中的力特定结构尺寸

由于各种原因,我有一些结构我想强制为特定大小(在这种情况下为64字节和512字节)。 然而,两者都低于我希望它们的尺寸。 反正我是否告诉编译器将它们设置为这些特定的大小并用零填充,或者我最好只是在结构中声明构成多余空间的数组,以便它与我想要的大小对齐?

C sizeof char指针

为什么这个char变量的大小等于1? int main(){ char s1[] = “hello”; fprintf(stderr, “(*s1) : %i\n”, sizeof(*s1) ) // prints out 1 }

sizeof(void)在C中等于1?

可能重复: 虚空的大小是多少? 大家好 ! 我正在使用gcc编译我的C程序,只是偶然发现sizeof(void)是C中的1个字节。 这有什么解释吗? 我一直认为它是零(如果它真的没有存储)! 谢谢 !

使用带有数组和指针的sizeof的实验

对于该计划: #include int main(void) { int (*a)[2]; int b[5]; printf(“sizeof(int) : %zu\n”, sizeof(int)); printf(“sizeof(int*) : %zu\n”, sizeof(int*)); printf(“sizeof(b) : %zu\n”,sizeof(b)); printf(“sizeof((int*)b) : %zu\n”,sizeof((int*)b)); printf(“sizeof(&b[0]) : %zu\n”,sizeof(&b[0])); printf(“sizeof(a) : %zu\n”,sizeof(a)); printf(“sizeof(a[0]) : %zu\n”,sizeof(a[0])); printf(“sizeof(a[1]) : %zu\n”,sizeof(a[1])); return 0; } 输出是: sizeof(int) : 4 -> Fact 1 sizeof(int*) : 8 -> Fact 2 sizeof(b) : 20 -> […]

一元+运算符会进行类型转换吗?

直到现在我才相信没有使用一元+算子。 但后来我遇到了以下例子: char ch; short sh; int i; printf(“%d %d %d”,sizeof(ch),sizeof(sh),sizeof(i)); // output: 1 2 4 printf(“%d %d %d”,sizeof(+ch),sizeof(+sh),sizeof(i)); // output: 4 4 4 这是否意味着+正在进行类型转换? 因为它的行为与以下相同 printf(“%d %d %d”,sizeof((int)ch),sizeof((int)sh),sizeof(i)); // output: 4 4 4 这迫使我认为+正在进行类型转换。 但后来我尝试double double f; printf(“%d %d”,sizeof(+f),sizeof((int)f),sizeof(f)); // output: 8 4 8 这迫使我重新考虑一元+算子。 所以我的第二个问题是:一元+运算符在sizeof运算符中有特殊效果吗?