我在之间的区别感到困惑(char*)'r'和"r",也许(char*)"r",如果这是从不同的"r".
int main () {
char fileNameOriginal[MAXLINE] = "test.txt";
openFile(&fp, fileNameOriginal, (char*)'r');
}
openFile(FILE **fp, char fileName[], char* mode) {
*fp = fopen(fileName, mode);
}
Run Code Online (Sandbox Code Playgroud)
传递模式参数的这种格式fopen不会导致我的eclipse IDE出现警告/错误.但是,将无法正确读取该文件.另一方面,传递"r"或(char*)"r"将产生正确的阅读.
(char*)'r'是一种将int常量转换'r'为char*指针的尝试.与之关联的实际值'r'取决于系统使用的编码.
当库函数尝试取消引用该指针时,程序行为将是未定义的.
"r"另一方面char[2],它是一种类型,它会衰减到char*函数所需的指针.
IDE对于不正确的情况发出警告很困难; 并记住,C的原则之一就是假设你知道自己在做什么!