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