为什么 fopen() 函数在将 char 传入函数时会抛出错误?

Why does fopen() function throws error when char is passed into it?

我正在使用 fopen 函数(可在此处找到:https://www.tutorialspoint.com/c_standard_library/c_function_fopen.htm)从 C 语言的文本文件中读取。函数原型定义为:

FILE *fopen( const char * filename, const char * mode );

看到第二个参数(mode)要求我传入一个char,我写了如下:

fp = fopen("testfile", 'w');

但是,这引发了分段错误。当我将其替换为:

fp = fopen("testfile", "w");

错误消失了。为什么需要 string 作为第二个参数,而不是原型指示的 char

再看看函数声明。 mode 参数的类型为 const char *,即指向 char.

的指针

模式参数是一个指针。当您传递一个 char 时,它会将其解释为一个指针,因此代码会尝试读取一些随机内存。幸运的是,随机存储器不可读,因此代码段错误。