当我在linux上使用GCC进行编译时,由于我在等待输入,因此“hi”出现。我不想使用scanf,并且想要知道为什么hi在显示,而我要求用户输入名称。另外,当我想打印刚刚通过的文件的名称时,我会得到垃圾字符。在netbeans中,我得到了我想要的。但在Linux上,它决定行为怪异。请帮助在输入系统调用期间添加了额外的字符串C
代码:
int main(int argc, char** argv)
{
char val[70];
if(write(1, "Please input your name", 36)!=36)
{
return -1;
}
if(read(0, val, 36) < 0)
{}
if(write(1, val, 36)!=36)
{}
printf("Yo");//THIS IS PRINTING OUT WAY BEFORE IT IS CALLED, ANY VARIABLE WITH A STRING GETS PRINTED OUT, EVEN WITHOUT PRINTF BEING INVOKED
}
输出:
Please input the file nameYo: hi
hi
???Om?0?a?Sm? <<WHAT IS THIS? I DONT GET THIS ON NETBEANS
你确定'“请输入你的名字”'是36个字符 - 我不总是计数非常好,但我得到22或一些这样的。 ..当然,“Yo”可能会在这个字符串后不久存储... – 2013-02-09 01:06:16
你的输出字符串不是36字节,所以你对系统说谎,但期望它做正确的事情。这通常不起作用。 – 2013-02-09 01:08:20
不要将调用混合在一起读取/写入到调用C++ stdio函数(如fread/fwrite/printf)。使用其中一个或另一个,或者你会因缓冲输入和输出的方式而感到困惑。 – 2013-02-09 01:09:38