使用fgets()读取字符输入时遭遇C++类型转换错误求助
解决fgets()的类型不匹配错误
嘿,我一眼就瞅出问题所在啦!你代码里的报错完全是因为fgets()的第一个参数需要是字符数组(或者指向字符数组的指针),但你定义的char a只是单个字符变量,类型不匹配才触发了这个转换错误。
错误原因拆解
先给你看fgets()的函数原型,你就能明白为啥报错了:
char *fgets(char *str, int num, FILE *stream);
它要求第一个参数是一个能容纳至少num-1个字符的缓冲区(也就是字符数组),用来存储读取到的内容。但你传进去的是单个char变量,编译器自然会跳出来说“没法把char转成char*”啦。
修正后的代码
把单个字符变量改成字符数组就搞定了,给你调整好的代码:
#include<iostream> #include<cstdio> using namespace std; int main() { // 定义一个能容纳99个字符+1个终止符的字符数组 char a[100]; fgets(a, sizeof(a), stdin); // 用sizeof(a)代替硬编码的100,后续改数组大小更方便 cout << a; return 0; }
额外小贴士
fgets()会把输入时的换行符\n也读进数组里,如果不需要这个换行符,可以手动找到它的位置替换成字符串终止符\0。- 定义数组时,大小要比你预期读取的最大字符数多1,因为C风格字符串必须以
\0结尾才行。
内容的提问来源于stack exchange,提问作者Chandramauli Chakraborty
相关产品推荐
相关产品推荐

