一个C常见问题,关于字符串的.
要输入一个字符串,事先不知其长度(多少字符),我只会用数组,并且将数组个数定的足够大,有没有什么办法定义一个变量可以避免这个问题,怎么定义?謝謝! 问题点数:20、回复次数:28Top
1 楼limlzm(凡叶)回复于 2004-12-03 11:44:28 得分 0
动态申请Top
2 楼monika0617(monika)回复于 2004-12-03 11:46:14 得分 0
如何解释动态申情啊
Top
3 楼ewayne(...)回复于 2004-12-03 11:48:17 得分 0
用new!Top
4 楼lxb8892(未来高手)回复于 2004-12-03 11:51:52 得分 0
定义一个指针char *s;Top
5 楼windindance(风舞轻扬·白首为功名)回复于 2004-12-03 11:53:56 得分 0
用C++就很简单了……
#include <string>
using namespace std;
main()
{
string s;
cin >> s;
}Top
6 楼monika0617(monika)回复于 2004-12-03 11:55:00 得分 0
lxb8892(未来高手) ,那S指向什么呢Top
7 楼5will(威儿)回复于 2004-12-03 11:59:13 得分 0
char *s=new char[1000];
差不多够用了
string s和上面这样做差不多了Top
8 楼LSYLSY(李思)回复于 2004-12-03 12:02:34 得分 0
链表,
可以考虑每十个字节一个接点。Top
9 楼greenteanet(扎扎实实打基础,保持一颗平常心。)回复于 2004-12-03 12:05:12 得分 0
我一般情况下是用new的,但是我觉得用string s,然后cin >> s;也可以Top
10 楼Gelf()回复于 2004-12-03 12:46:19 得分 0
1.用new申请空间;
2.赋值给指针;
3.结束时用deleteTop
11 楼gimney(星外来客)回复于 2004-12-03 12:55:20 得分 0
CUIntArray uiarry;
就可以了!Top
12 楼monika0617(monika)回复于 2004-12-03 13:09:22 得分 0
我用的是C,在TC3.0下编译的,各位说的好象大都是C++Top
13 楼BeShrek(今晚打老虎)回复于 2004-12-03 13:19:30 得分 0
同意 LSYLSY(李思),用链表Top
14 楼qingyuan18(zealot_tang)回复于 2004-12-03 13:27:08 得分 0
string [] arrayTop
15 楼tsingien(Read The F**king Source Code)回复于 2004-12-03 14:05:19 得分 0
用链表是省空间呢还是浪费空间呢?不划算,并且操作起来也麻烦。我觉得如果不是做嵌入式开发的你申请个几百个字节的空间是没什么问题的。没必要在这些小细节上计较。动态申请内存还要自己记得去释放,也比较麻烦的。Top
16 楼mhpdongxie(东邪)回复于 2004-12-03 14:23:20 得分 0
其实,动态分配与数组差不多,都要自己去定义大小,而且,动态分配的还要释放更麻烦,
建议还是使用一个足够大的数组,字符型指针不安全,会引起数据的破坏,还是别用了Top
17 楼ww425(如果人人都学一点JAVA,这个世界将变的更加美好!)回复于 2004-12-03 14:56:58 得分 0
用new就好了Top
18 楼rowdy(阿丘)回复于 2004-12-03 15:13:34 得分 0
楼主的问题不怎么实用,又麻烦!Top
19 楼keard(夜静水寒鱼不食,满船空载月明归)回复于 2004-12-03 15:43:14 得分 0
写到文件里去好了Top
20 楼xdspower(杂食菜熊)回复于 2004-12-03 16:08:53 得分 0
用数组其实是比较好的,不过要作好边界检测和处理,防止数据越界破坏程序。Top
21 楼copygirl(wa!)回复于 2004-12-03 16:22:39 得分 5
其实从本质上说,数组与指针是一样的,只不过数组在定义的时候定义了长度,而指针呢,只是在赋值的时候才定义了长度。
比如你char aa[2];aa[2]="12";
定义指针的时候char *p;这时p是没长度的,但p="12";时,就相当于把p的长度定义为2。
再注意一下最后一个'\0',当你想把一个指针的地址给一个数组的时候,如aa=p,那么,aa的长度一定要是指针长度加1,也就是aa[3],这样,指针最后的一个隐藏的'\0'才能复制到数组中,可以用printf("%s",aa);打印出来,否则就会在12后面出现乱码。
Top
22 楼GlacJAY(++C死爱我)回复于 2004-12-03 17:40:12 得分 0
同意keard,一个字符一个字符的读,然后一个字符一个字符的写到一个文件中,几十万个应该没问题
:-)Top
23 楼masse(当午 http://blog.sina.com.cn/xukf)回复于 2004-12-03 23:03:55 得分 0
这一点上还是java爽Top
24 楼SummerIdea(小菜学编程)回复于 2004-12-04 09:27:28 得分 5
看看这个是否符合楼主的要求,合适的话,呵呵,给分:)
#include <stdio.h>
void main()
{
int c;
while((c = getchar()) != EOF) //ctrl + z end;
putchar(c);
getchar();
}Top
25 楼sink()回复于 2004-12-04 10:28:29 得分 10
#include <stdio.h>
#include <stdlib.h>//(or malloc.h) include malloc,free
int main(int argc,char *argv[])
{
int len;
char *p;
len=strlen(argv[1]);
p=(char *)malloc(len+1);
............
free(p);
}Top
26 楼WezZai(偶是湖南的)回复于 2004-12-04 10:41:24 得分 0
看楼上的...Top
27 楼godttj(Gody)回复于 2004-12-04 11:31:22 得分 0
开始就定制个活动的。Top
28 楼huxiaohuangcheng(虎虎)回复于 2004-12-04 19:33:41 得分 0
就用new 就可以了,也可以知道设计一个string类的.Top




