我真的很难理解差异.有人说他们是一样的,而另一些人说有一点点差别.究竟有什么区别?如果你用一些比喻来解释,我希望如此.
在通过GUI(alt + enter)以及终端(ls -l)在Ubuntu 12.10上创建文本文件后,我做了以下观察.
当文件只包含一个字符时,为什么还要增加1个字节,我知道这不是因为End-Of-File,因为当我编写ac程序时,当它到达End-Of-File时循环终止并且它给了我相同的结果,所以显然这不算数,那又是什么呢?
但是在Windows上,当文件包含一个字符时,文件大小只有1个字节,这是正常的.这些东西背后有什么东西?
我读了一篇文章(忘了URL),里面说的argv[argc]
是一个NULL
指针(包含\0
).要检查是否真的我写了这段代码,是的,它存在.我不明白的是,为什么操作系统包含此NULL
指针argv[argc]
.它对其他东西也有用吗?
int
main (int argc, char **argv){
while (*argv)
printf ("%s\n", *argv++);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 当我读到K&R的C编程语言第176页时,我非常兴奋.我找到了struct FILE的所有成员(我正在搜索),并且知道事情是如何工作的真棒.但猜猜是什么,gcc抱怨,错误:'FILE'没有名为'fd'的成员.这意味着现在情况发生了变化,我用Google搜索但找不到.请帮助,提前谢谢.
我可以使用fileno()来获取文件描述符,但我讨厌在抽象级别上工作.
int
main ( int argc, char **argv ){
FILE *fp = fopen ("ct.c", "r");
printf ("%i", fp->fd);
return 0;
}
Run Code Online (Sandbox Code Playgroud) (我的问题只与2的补码有关)
假设我给你这个二进制数11111110,它在机器上存储为二进制补码,我希望你找到它的十进制等值.有些人可能会说它是-2而有些人可能会说这是254,因为他们不知道是签名还是未签名.(我知道这是一个有符号的数字,所以我拿了它的补码并加了1给了我2,所以答案是-2.但如果我不知道这个标志,我会说254).
简而言之,计算机如何将存储在2的补码中的二进制表示转换为其十进制等值而不会出错?
电脑是否知道它的标志?(如果是,那么这些信息存储在哪里?)
#include <stdio.h>
#include <unistd.h>
int main (){
while(1){
fprintf (stdout,"hello-out");
fprintf (stderr,"hello-err");
sleep (1);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
好吧,我认为这只是打印,你好 - 然后你好 - 错误地休息一下并再次打印那些文字,但不,奇怪的事情正在发生,它只是打印hello-err然后需要一秒休息并做同样的事情再次.为什么?
但是等等,然后我决定在不同的行上打印它们,现在它起作用了.
fprintf (stdout,"hello-out\n");
fprintf (stderr,"hello-err\n");
Run Code Online (Sandbox Code Playgroud)
- - - - - 与...一样 - - - - - -
fprintf (stdout,"hello-out\n");
fprintf (stderr,"hello-err");
Run Code Online (Sandbox Code Playgroud)
那么'\n'在这里的重要性是什么?这与潮红有关吗?因为我读到'\n'用于冲洗.
并且还在stdout上打印文字,不会产生任何输出:(
fprintf (stdout,"hello-out");
fprintf (stdout,"hello-err");
Run Code Online (Sandbox Code Playgroud)
为什么?