这与操作系统有关。linux 允许 返回值好像是7位二进制,十进制 0-255。windows 允许 负值,例如 -1,-5 等等。你可以做试验:(1) 写程序 b.c, 编译成 b.exe:include <stdio.h> int main(){ return 254; //你可以改变数值做试验 } (2)写程序 a.c, 编译和运行 include <std...
_exit函数中status参数定义了进程的终止状态,父进程可以通过wait()来获取该状态值。需要注意的是返回值,虽然status是int型,但是仅有低8位可以被父进程所用。所以写exit(-1)结束进程时,在终端执行“$?”会发现返回值是255。return是一种更常见的终止进程的方法。执行return(n)等同于执行exit(n),因为调用main() ...
因为a[0]=-1-0=-1,a[1]=-1-1=-2...显然,a[254]=-1-254=-255,而a[255]=-1-255=-256!-256的二进制表示为100000000,已赶出了char型的表示范围,那个进位上去的1就被自动丢弃了,所以变成了0!而0恰好是字符串的结束符,strlen(a)又是计算a的长度的函数,是以结束符0为界的,...
strlen计算某个字符数组的长度是按照找到第一个'\0'作为结束标志,因此如果你的长度为255说明你的字符数组的a[255]='\0',因为a[255]被你赋成-1-255=-256=00000000就是'0'。本来256应该是100000000的,但是字符类型只能占一个字节,因此只会存储8位,具体的话还得看看系统处理的方式。
//fgets(arr, 256, pf);//读取256,最多255,因为他有保护模式//fputs(arr, stdout); while (fgets(arr, 256, pf) != NULL) { printf("%s", arr); } fclose(pf); pf = NULL; return 0; } fread size_t fread( void *buffer, size_t size, size_t count, FILE *stream );//count是最多...
return 1; } 5.关键字sizeof: 怎么说明sizeof是关键字不是函数,这里有两个例子: a. int i; printf("%d\n",sizeof i); 可见 sizeof是关键字 b. sizeof(fun()); 不调用fun函数 因为sizeof是在预编译期间完成的说明是关键字 sizeof的代码: ...
所以,int 和 char 只是存储的范围不同,整型可以是 2 字节,4 字节,8 字节,而字符型只占 1 字节。 有些C 编译器把 char 实现为有符号类型,这意味着 char 可表示的范围是 -128 ~ 127,而有些编译器把 char 实现为无符号类型,这种情况下 char 可表示的范围是 0 - 255。signed char 表示的是有符号类型...
代码本意是想表达tmp=tmp+1,但是将复合赋值运算符”+=”误写成”=+”:将正整数常量1赋值给变量tmp。编译器会欣然接受这类代码,连警告都不会产生。 如果你能在调试阶段就发现这个Bug,真应该庆祝一下,否则这很可能会成为一个重大隐含Bug,且不易被察觉。
对于无符号char类型,表示的范围为0~255,所以无符号char类型变量i永远小于256(第一个for循环无限执行),永远大于等于0(第二个for循环无限执行)。需要说明的是,赋值代码i=256是被C语言允许的,即使这个初值已经超出了变量i可以表示的范围。C语言会千方百计的为程序员创造出错的机会,可见一斑。