当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 18 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : C语言中字符串大小分配问题
帖子发表于 : 2010-09-14 8:50 
头像

注册: 2007-09-23 17:06
帖子: 1051
送出感谢: 1
接收感谢: 8
是这样子的,我想实现的是 我输入多少个字符,程序就为它分配多少个字符的空间,比如:我单独输入一个 ‘a’,那程序就给它一个字符的空间,如果我输入 “fakjfiejfiajkfl2165125.fkdfjd" 那程序就给它分配这么多的 空间,请问该怎么实现?
我想了一下,实现这个功能有几种途径:
1,数组,不行!原因是数组的大小是事先指定的,会出现浪费或者不够的现象;
2, 动态分配,malloc ,也不行,原因和数组的一样,因为要指定一个分配基数的,也或者会出现再次要求分配的情况,不见得就行。
3,字符指针, 也比较困难,它还是分配一些空间才能正确指向输入的字符,要不然会出现段错误。
。。。。。。。。。。。。。

请问该怎么做?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-09-14 8:58 
头像

注册: 2008-11-05 13:24
帖子: 1024
送出感谢: 0 次
接收感谢: 5
这么高级,不懂。


_________________
笔记
-------------------------------------
http://blog.163.com/wqt_1101


页首
 用户资料  
 
3 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-09-14 9:40 
头像

注册: 2006-05-19 9:54
帖子: 1823
地址: Shanghai
送出感谢: 2
接收感谢: 11
不能实现,没有人知道你要输入多少个字符,你自己也不知道
但是可以想办法写点代码在空间不够的时候自动扩张,在c++下,这个就是std::string类


_________________
ニンニク入れますか?
x60 with gentoo


页首
 用户资料  
 
4 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-09-14 11:16 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
为什么会有这种要求,好变态啊。

动态分配吧,用 malloc + realloc 。用户输入一个字符,分配一个字符空间。


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
5 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-09-14 12:02 

注册: 2009-04-03 15:10
帖子: 1831
送出感谢: 0 次
接收感谢: 0 次
动态分配就可以做到


页首
 用户资料  
 
6 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-09-14 14:30 

注册: 2006-09-11 22:47
帖子: 2841
送出感谢: 0 次
接收感谢: 4
Crazier 写道:
是这样子的,我想实现的是 我输入多少个字符,程序就为它分配多少个字符的空间,比如:我单独输入一个 ‘a’,那程序就给它一个字符的空间,如果我输入 “fakjfiejfiajkfl2165125.fkdfjd" 那程序就给它分配这么多的 空间,请问该怎么实现?


关键是看你怎么输入,办法总是有的。但是逻辑上你的程序要是合理的。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-09-16 8:06 
头像

注册: 2007-09-23 17:06
帖子: 1051
送出感谢: 1
接收感谢: 8
poet 写道:
Crazier 写道:
是这样子的,我想实现的是 我输入多少个字符,程序就为它分配多少个字符的空间,比如:我单独输入一个 ‘a’,那程序就给它一个字符的空间,如果我输入 “fakjfiejfiajkfl2165125.fkdfjd" 那程序就给它分配这么多的 空间,请问该怎么实现?


关键是看你怎么输入,办法总是有的。但是逻辑上你的程序要是合理的。


输入的话,就是不断续的输入一个字符串,并没有多大的特殊。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-09-16 8:46 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
realloc 应该是差不多的意思。你自己先想想,你这需求,是为什么。


_________________
● 鸣学


页首
 用户资料  
 
9 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-09-16 13:17 
头像

注册: 2007-09-23 17:06
帖子: 1051
送出感谢: 1
接收感谢: 8
eexpress 写道:
realloc 应该是差不多的意思。你自己先想想,你这需求,是为什么。

谢谢提醒,并没有什么需求,只是自己实验搞着玩的,想着即不浪费空间,又能快速的保存长度不定的字符串。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-09-16 18:39 

注册: 2006-09-11 22:47
帖子: 2841
送出感谢: 0 次
接收感谢: 4
Crazier 写道:
poet 写道:
Crazier 写道:
是这样子的,我想实现的是 我输入多少个字符,程序就为它分配多少个字符的空间,比如:我单独输入一个 ‘a’,那程序就给它一个字符的空间,如果我输入 “fakjfiejfiajkfl2165125.fkdfjd" 那程序就给它分配这么多的 空间,请问该怎么实现?

关键是看你怎么输入,办法总是有的。但是逻辑上你的程序要是合理的。

输入的话,就是不断续的输入一个字符串,并没有多大的特殊。


你还不明白么?

你用什么函数去接收输入?

你用什么空间去接收传入的字符?

你分配空间,是在“调用输入函数之前”,而你输入,是在调用输入函数之后。

你如何在调用函数的时候预测将输入多少字符?

所以说,逻辑上要想明白了,剩下的问题就好做了。


页首
 用户资料  
 
11 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-09-16 19:45 
头像

注册: 2007-09-23 17:06
帖子: 1051
送出感谢: 1
接收感谢: 8
poet 写道:
Crazier 写道:
poet 写道:
Crazier 写道:
是这样子的,我想实现的是 我输入多少个字符,程序就为它分配多少个字符的空间,比如:我单独输入一个 ‘a’,那程序就给它一个字符的空间,如果我输入 “fakjfiejfiajkfl2165125.fkdfjd" 那程序就给它分配这么多的 空间,请问该怎么实现?

关键是看你怎么输入,办法总是有的。但是逻辑上你的程序要是合理的。

输入的话,就是不断续的输入一个字符串,并没有多大的特殊。


你还不明白么?

你用什么函数去接收输入?

你用什么空间去接收传入的字符?

你分配空间,是在“调用输入函数之前”,而你输入,是在调用输入函数之后。

你如何在调用函数的时候预测将输入多少字符?

所以说,逻辑上要想明白了,剩下的问题就好做了。


我不得不说你说的很到位,这是我写的小程序,实现从输入的字符串提取数字并输出,字符串的长度取决于你当时的心情,你看看能怎么修改一下。

代码:
#include<ctype.h>
#include<string.h>
#include<stdlib.h>

int main(void)
{
    int i=0, j=0, num, len;
    char *str, *temp,test[500];
    str = test;
    printf("Input your string:\n");
    scanf("%s", str);
    printf("%s",str);
    len = strlen(str);
    printf("stringlenth %d\n",len);
    temp = (char *)malloc( len * sizeof(char) );
   
    for(i=0; str[i] != '\0'; i++){
        if( isdigit(str[i]) ){
            temp[j++] = str[i];
            if ( !isdigit(str[i+1]) ){
                temp[j] = '\0';
                num = atoi(temp);
                printf("%d    ", num);
                j = 0;
            }
            }
        }
    return 0;
}


页首
 用户资料  
 
12 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-10-04 19:03 

注册: 2009-03-07 16:06
帖子: 31
送出感谢: 0 次
接收感谢: 0 次
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
   char *tmp = (char*)malloc(sizeof(char));
   int cnt =0;
   while(scanf("%c", tmp)){
      if(*tmp == '\n'){
         printf("strlen:%d\n", cnt);
         cnt=0;
      }
      else{
         cnt++;
         /*add your codes here*/
         if(isdigit(*tmp))
            printf("%c\n", *tmp);
      }
   }
   return 0;
}

这样会不会好些,为什么都要存起来呢。。其实如果一定要把数据储存起来的话可以在每读入一个char的时候进行长度的改变,可以自己创建一个链表一样的数据结构来做,不过空间上就变成了cnt*(sizeof(char)+sizeof(char*))了。如果一定要严格跟输入字符一样的话可以在每个循环里做一个realloc。。但是感觉那样很丑,一大堆realloc系统调用可能还没有自己做的链表效率高。

是不是人一放假精力就不集中了,怎么老写错别字啊


最后由 kse8107 编辑于 2010-10-04 19:28,总共编辑了 3 次

页首
 用户资料  
 
13 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-10-04 19:06 
头像

注册: 2007-05-06 8:19
帖子: 7445
送出感谢: 0 次
接收感谢: 5
字节数量应该比你给的多一个吧,哈

弄不好就算一个漏洞,嘎嘎


页首
 用户资料  
 
14 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-10-08 19:26 
头像

注册: 2007-09-23 17:06
帖子: 1051
送出感谢: 1
接收感谢: 8
kse8107 写道:
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
   char *tmp = (char*)malloc(sizeof(char));
   int cnt =0;
   while(scanf("%c", tmp)){
      if(*tmp == '\n'){
         printf("strlen:%d\n", cnt);
         cnt=0;
      }
      else{
         cnt++;
         /*add your codes here*/
         if(isdigit(*tmp))
            printf("%c\n", *tmp);
      }
   }
   return 0;
}

这样会不会好些,为什么都要存起来呢。。其实如果一定要把数据储存起来的话可以在每读入一个char的时候进行长度的改变,可以自己创建一个链表一样的数据结构来做,不过空间上就变成了cnt*(sizeof(char)+sizeof(char*))了。如果一定要严格跟输入字符一样的话可以在每个循环里做一个realloc。。但是感觉那样很丑,一大堆realloc系统调用可能还没有自己做的链表效率高。

是不是人一放假精力就不集中了,怎么老写错别字啊


谢谢你这么投入,写了这么多,我好好思考思考,一时的兴趣造就了这么多麻烦呀。。。 :em24


页首
 用户资料  
 
15 楼 
 文章标题 : Re: C语言中字符串大小分配问题
帖子发表于 : 2010-10-08 23:48 

注册: 2009-03-07 16:06
帖子: 31
送出感谢: 0 次
接收感谢: 0 次
Crazier 写道:
kse8107 写道:
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
   char *tmp = (char*)malloc(sizeof(char));
   int cnt =0;
   while(scanf("%c", tmp)){
      if(*tmp == '\n'){
         printf("strlen:%d\n", cnt);
         cnt=0;
      }
      else{
         cnt++;
         /*add your codes here*/
         if(isdigit(*tmp))
            printf("%c\n", *tmp);
      }
   }
   return 0;
}

这样会不会好些,为什么都要存起来呢。。其实如果一定要把数据储存起来的话可以在每读入一个char的时候进行长度的改变,可以自己创建一个链表一样的数据结构来做,不过空间上就变成了cnt*(sizeof(char)+sizeof(char*))了。如果一定要严格跟输入字符一样的话可以在每个循环里做一个realloc。。但是感觉那样很丑,一大堆realloc系统调用可能还没有自己做的链表效率高。

是不是人一放假精力就不集中了,怎么老写错别字啊


谢谢你这么投入,写了这么多,我好好思考思考,一时的兴趣造就了这么多麻烦呀。。。 :em24


……其实你可以理解成我最近比较无聊。。 :em06


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 18 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译