说我有这些指示:
char* stin, stout;
如果我这样做:
stin = (char*)stdin;
stout = (char*)stdout;
这两个指针总是会返回标准输入和标准输出中的任何内容吗?或者我会得到某种错误。所以,如果我做了像
这样的事情fprint("Stdin contains %s:\n", *stin);
这会回垃圾吗?
答案 0 :(得分:0)
这会回垃圾吗?
可能。 stdin
和stdout
属于FILE*
类型。试图将它们视为char *
并将其打印为字符串是没有意义的,并且无法保证将会发生什么或不会发生 - 行为未定义。
FILE *意在由标准C函数操作,例如fread(),fputs()等。
另一个未定义的行为是printf语句本身。
fprint("Stdin contains %s:\n", *stin);
^^ ^^^
通过使用%s
,您承诺参数是一个字符串,即char *
,它是一个以nul字节结尾的字符序列。位*stin
不是指针(char*
),它是char
,因此类型不匹配。