注册 登录
编程论坛 C++教室

求解我的小小问题

qiouhongOK 发布于 2007-04-28 11:43, 711 次点击

#include <stdio.h>
void main()
{
char *item=new char[5];
scanf("%s", item);
printf("item = %s", item);
}

输入多于5个字符(但不能多太多),还是可以全部输出!
急求!!!

9 回复
#2
yushui2007-04-28 11:52

你那个就只能输入5个阿
用for(int i=0;i<5; i++)
cin>>item[i];
输出也用循环 就是了 我不会C

#3
weishj2007-04-28 18:56
输入字符多于五个时堆内存溢出
#4
海子2007-04-28 19:04

你定义的是一个有五个字符穿指针的数组,而不是志向五个字符的指针!!
可以用以下方法达到你的要求:
#include <stdio.h>
void main()
{
char item[5];
scanf("%s", item);
printf("item = %s", item);
}
现在试试!!

#5
I喜欢c2007-04-28 19:11

虽然溢出~``
但你输入的字符是连续存放的~``
所以指针输出当然全都输出了~`
随便说句...那是比较危险的操作...

#6
qiouhongOK2007-04-29 20:06
哦,谢了
#7
ifeitian2007-05-04 20:21
回复:(qiouhongOK)求解我的小小问题

#include <stdio.h>
void main()
{
char *item=new char[5];
scanf("%s", item);
printf("item = %s", item);
}

输入多于5个字符(但不能多太多),还是可以全部输出!
急求!!!
使用new动态分配空间的返回值是空间的首地址,而你用一个指向字符的指针接收相当于定义了一个字符串指针而字符串指针的长度是不确定的因此分配的空间大小是没有用的。
你输入时使用字符串输入格式并用指针名(scanf("%s", item);)所以当你输入时你可以多于五个字符而且当你输完时系统自动加上结束符;你输出时使用字符串输出格式并用指针名(printf("item = %s", item);)所以直到遇到结束符才停止输出因此可以全部输出。

#8
modelmomo2007-05-06 22:26
楼上正解
1