char a; char b; printf("%ld\n",sizeof(a+1)); printf("%ld\n",sizeof(a=a+1)); 结果为什么不同
时间: 2024-05-18 22:16:17 浏览: 81
这是因为 sizeof 是一个编译时运算符,它的结果在编译时就可以确定。而表达式 a=a+1 是一个运行时的赋值表达式,它会将 a 的值加 1,并将结果赋值给 a。由于 sizeof 是一个编译时运算符,它在编译时并不会执行 a=a+1 这个语句,所以 sizeof(a+1) 的结果是 4,而 sizeof(a=a+1) 的结果仍然是 1,因为 a 的类型是 char,它在内存中只占据 1 个字节。
相关问题
#include<stdio.h> struct A { int a; char b; float c; char name[10]; }; int main(void) { printf("%ld\n",sizeof(struct A)); return 0; }为什么结果是24
结构体的大小是由其成员变量的大小和对齐方式决定的。在本例中,结构体 `A` 的成员变量依次为整型变量 `a`、字符型变量 `b`、单精度浮点型变量 `c`、字符数组 `name`,其中 `a` 占4个字节,`b` 占1个字节,`c` 占4个字节,`name` 占10个字节。由于对齐方式的影响,`b` 后面会填充3个字节,`name` 后面会填充2个字节,以保证结构体的成员变量对齐。因此,结构体 `A` 的大小是 4 + 1 + 4 + 10 + 3 + 2 = 24 字节。
#include <stdio.h> #include <stdlib.h> #define N 60 int main(int argc ,char *argv[]) { if (argc< 2) { perror("参数错误\n"); return -1; } FILE *fpr ; if ((fpr=fopen (argv[1],"r") )== NULL ) { perror("fpropen"); return -1; } fseek(fpr,0,SEEK_END); long size =ftell(fpr); printf("%ld",size); rewind(fpr); printf("%ld",size); char *buff =(char*)malloc(sizeof(char)*size); if (NULL == buff) { perror("空间获取失败"); return -1; } fread(buff,sizeof(char),size,fpr); // printf ("%s",*buff); free(buff);怎么给他直接输出到屏幕中
你可以使用 printf 函数将读取的文件内容输出到屏幕上,而不是使用 free 函数释放内存。可以将下面这行代码:
```c
// printf ("%s",*buff);
```
修改为:
```c
printf("%s", buff);
```
这样就可以直接将读取的文件内容输出到屏幕上了。注意,此时不需要使用 free 函数释放内存,因为 buff 的内存空间仍然会被使用。
阅读全文