| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 785 人关注过本帖, 1 人收藏
标题:做到字符串数组动态内存存储~运行不正确~难道就没人会?~
只看楼主 加入收藏
起名真难
Rank: 1
来 自:广东广州
等 级:新手上路
帖 子:19
专家分:3
注 册:2011-3-31
结帖率:80%
收藏(1)
已结贴  问题点数:18 回复次数:5 
做到字符串数组动态内存存储~运行不正确~难道就没人会?~
程序代码:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
void main()
{char **ss,**h;

 int i,j,len=3;    //字符串个数为3个   
 h=ss;             //将ss的首地址赋值给h
 *ss=(char *)calloc(len,1);   //先将len个(3个)长度为1的连续空间给一级ss指针
 for(j=0;j<len;j++,*ss++)     //以下四行分别对每个一级指针赋字符串
 {for(i=0;(*(*ss+i)=getchar())!='\n';i++)    //对一级指针的i行中的元素分别赋值,知道遇到‘\n’为止
  *(ss+i)=(char *)realloc(*(ss+i),strlen(*(ss+i))+1);  //一级指针的第i行每增加一元素,在那一行上面内存增加一个单元
  *(*ss+i)='\0';    //在那一行中末尾加上转义字符0
 }

 ss=h;    //ss指回首位
 for(i=0;i<len;i++)    //以下是输出
 printf("\n%s",*(ss+i));
void free(char *ss);
}
我想动态分配3个连续的空间来装3个字符串(字符串未知),代码如上,我的目的是想让内存利用率达到最大,如果用字符串数组的话开始要先定义大小,这就要开很大的空间而造成浪费(在不知道各字符串大小情况下),不知道大家看懂我的代码没,在TC3.0上运行如下
输入:
china
japan
america

输出:
chin*
japan
america

在输出china时候那个*是其他的字符,郁闷,找不出错在哪里~小弟大一,只学完谭浩强的C程序设计,如果哥们找不出错误,有更好的办法请带注释附上代码,小弟万分感激!

[ 本帖最后由 起名真难 于 2011-4-29 18:48 编辑 ]
搜索更多相关主题的帖子: 字符串 
2011-04-29 02:33
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:5 
指针太多了 有点蒙

                                         
===========深入<----------------->浅出============
2011-04-29 21:49
liushiwei
Rank: 2
来 自:德阳
等 级:论坛游民
帖 子:9
专家分:14
注 册:2011-4-7
收藏
得分:5 
既然你刚刚学C不久,为什么写的那么精简呢,搞得自己都不懂,其实你浪费的那点空间对现在电脑不存在影响,现在的电脑配置都很强大,等你深入的学C再考虑吧,呵呵呵,推荐一本书“指针的艺术”
2011-04-29 23:16
cacker
该用户已被删除
收藏
得分:5 
提示: 作者被禁止或删除 内容自动屏蔽
2011-04-30 01:31
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:5 
像这种说好了是3个字符串的,你可以用 char *ss[3]。
之后 ss[0] = malloc(...) 这么用。

你也知道是二级指针,只分配一层怎么可能呢。
如果真要 char **ss
肯定得先 ss = (char **) malloc() 分配一次放 char * 的地方。
然后再 ss[0] = (char*) malloc () 放字符串。
2011-04-30 10:43
wuxpe
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-3-27
收藏
得分:0 
程序代码:
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
struct num{
char a;struct num *next;
}num1;
void main()
{   char i;struct num*h[3],*p,*p1; int j;
for(j=0;j<3;j++)
{

    h[j]=(struct num*)malloc(sizeof(num1));
    if(!h[j])
    { printf("error");
    }
    }
    p=(struct num*)malloc(sizeof(num1));
     if(!p)
    { printf("error");
    }
      for(j=0;j<3;j++)
      {
    h[j]->a='\0';h[j]->next=NULL;p=h[j];
    scanf("%c",&i);
    while((int)i!=10){
    p1=(struct num*)malloc(sizeof(num1));
      p->next=p1;p1->a=i;p1->next=NULL;p=p1;
        scanf("%c",&i);
        }
        }

       for(j=0;j<3;j++)
       {
     p=h[j]->next;

     while(p!=NULL){
     printf("%c",p->a);
     p=p->next;}
                printf("\n"); }
                 free(h[0]) ;free(h[1]);free(h[2]);
      free(p);
      free(p1);

      getch();


}
运用链表的,你的能看的懂,但没改对。
2011-05-11 00:37
快速回复:做到字符串数组动态内存存储~运行不正确~难道就没人会?~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022005 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved