0

说我有这些指示:

 char* stin, stout;

如果我做类似的事情:

 stin = (char*)stdin;
 stout = (char*)stdout;

这两个指针总是返回标准输入和标准输出吗?或者我会得到某种错误。所以,如果我做类似的事情

fprint("Stdin contains %s:\n", *stin);

这会返回垃圾吗?

4

1 回答 1

0

这会返回垃圾吗?

它可能。stdin并且stdout属于 类型FILE*。试图将它们视为 achar * 并将其打印为字符串是没有意义的,并且无法保证会发生什么或不会发生什么 - 行为是未定义的。

FILE* 旨在由标准 C 函数操作,例如 fread()、fputs() 和类似函数。

另一个未定义的行为是 printf 语句本身。

 fprint("Stdin contains %s:\n", *stin);
                        ^^      ^^^  

通过使用%s,您承诺参数是一个字符串,它是一个 char *以 nul 字节结尾的字符序列。bit*stin不是指针(a char*),它是 a char,所以类型不匹配。

于 2013-11-14T01:48:46.440 回答