问题描述
- 下面的程序错在哪里?怎么改呀?
-
char a[20]={'a','b','','c','d','','e','f'};
int i;
for(i=0;i<20;i++)puts(a[i]);
system("pause");
put(a[i])中a下面有红线错误提示。
错误提示为:错误 1 error C2664: “puts”: 不能将参数 1 从“char”转换为“const char *” c:usersadministratordesktopc程序c程序.cpp 613 1 C程序
是什么意思?
当为什么puts(&a[i])运行结果如下?
ab
b
cd
d
ef
f
解决方案
puts()只能输出字符串~
解决方案二:
char a[20]={'a','b','','c','d','','e','f'};
puts(a);
system("pause");
或
char a[20]={'a','b','','c','d','','e','f'};
int i;
for(i=0;i<20;i++)
printf("%c",a[i]);
system("pause");
解决方案三:
char str[2];
for(i=0;i<20;i++){
str[0] = a[i];
str[1] = '';
puts(str);
}
字符串是有结束标志位''的,这个函数就是读取到字符的结束标志位为止在输出~~
解决方案四:
puts是输出字符串,如果你希望打印字符就用printf %c
解决方案五:
puts(const char * str) 该函数要求的参数是 const char* 指针,你定义的字符数组,所以转换时报错。puts()会自动输出'n’,但是不输出''
如果成功输出则返回输出字节数,失败返回-1;
你要单个的输出字符应该用printf("%c"),
至于你说的printf(&a[i]);的结果是这样子:
for(i=0;i<20;i++);
当i=0时:&a【0】就是字符串ab的首地址,到‘’所以输出ab
当i=1时:&a【1】就是字符b的地址,到‘’,所以输出b,
当i=2时:&a【2】就是字符‘’的地址,但是puts()不输出‘’,所以多一个换行
然后就是重复
i=3时:&a【3】就是字符串cd的首地址,到‘',所以说出cd
i=4时:&a【4】就是字符d的地址,到’',说出d
。
。
。
。最后就是ef
f
,再往下输出,就会有未知字符,那就是数组越界了
解决方案六:
估计你想要的是这样吧
for(i=0;i<20;i++)
putchar(aa[i]);
结果是ab cd ef