| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 726 人关注过本帖
标题:字符串问题 高手请进
只看楼主 加入收藏
黄色海岸2009
Rank: 1
等 级:新手上路
帖 子:38
专家分:2
注 册:2009-11-7
结帖率:87.5%
收藏
已结贴  问题点数:10 回复次数:9 
字符串问题 高手请进
一个文件里面全是单词
每行一个;
文件输入后我想申请动态数组然后把每行
的单词分别付给一个数组
为什么不行?

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main()
{
int i=1;
int j=0;
char **str;
char line[100];
FILE *stream;
stream =fopen("sist.c","r");
if(stream==NULL)
printf("error\n");
while(fgets(line,100,stream)!=NULL)
{
str=(char **)realloc(str,i*sizeof(char *));
str[i]=(char *)malloc(100*sizeof(char));
strcpy(line,&str[i]);
printf("%s",str);
i++;
}
fclose(stream);

}

搜索更多相关主题的帖子: 字符 
2009-11-17 04:02
chiZ
Rank: 2
来 自:paradise
等 级:论坛游民
帖 子:27
专家分:99
注 册:2009-10-25
收藏
得分:5 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int i=0,z;
int j=0,count= 0;
char **str;
char line[100];
FILE *stream;

if(!(stream =fopen("sist.txt","r")))
    return -1;

while(fgets(line,100,stream)!=NULL)
{
    count++;
}
fclose(stream);

if(!(stream =fopen("sist.txt","r")))
    return -1;
if(!(str =(char**) malloc(count*sizeof(char*))))
        return -1;

while(fgets(line,100,stream)!=NULL)
{
    if(!(str[i]=(char*)malloc(100*sizeof(char))))
        return -1;

    strcpy(str[i],line);
    i++;
}
for(z=0; z<count; z++)
    printf(" %s \n",str[z]);

fclose(stream);
return 0;

}
2009-11-17 06:02
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:0 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main()
{
int i=1;
int j=0;
char **str;
char line[100];
FILE *stream;
stream =fopen("sist.c","r");
if(stream==NULL)
printf("error\n");
while(fgets(line,100,stream)!=NULL)
{
str=(char **)realloc(str,i*sizeof(char *));
str[i]=(char *)malloc(100*sizeof(char));
strcpy(line,str[i]);
printf("%s",str);
i++;
}
fclose(stream);

}
2009-11-17 13:06
黄色海岸2009
Rank: 1
等 级:新手上路
帖 子:38
专家分:2
注 册:2009-11-7
收藏
得分:0 
陈大师,按你说的我改过了 可是输出是乱码啊 ,你调试过了么。为什么我
总是乱码呢????
2009-11-17 16:46
黄色海岸2009
Rank: 1
等 级:新手上路
帖 子:38
专家分:2
注 册:2009-11-7
收藏
得分:0 
二楼的兄弟,我调试过你的程序,我只把sist.txt 改成了sist.c
可是什么输书不出了。不知道是为什么呢???
好急啊
2009-11-17 17:01
黄色海岸2009
Rank: 1
等 级:新手上路
帖 子:38
专家分:2
注 册:2009-11-7
收藏
得分:0 
没人会么 我就是感觉line不能赋给str【i】
可是为什么呢 要怎么改呢 很着急啊
2009-11-17 17:33
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:5 
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
    int i=0;
    int j=0;
    char **str;
    char line[100];
    FILE *stream;
    stream =fopen("sist.c","r");
    if(stream==NULL)
        printf("error\n");    
    while(fgets(line,100,stream)!=NULL)
    {
        if(0 == i)
            str = (char**) malloc (sizeof(char*));  //  用realloc的话,第一次也要用malloc先申请到空间,然后再增加
        str[i]=(char *)malloc(strlen(line)*sizeof(char));//这里我把100改成了strlen(line),个人认为既然是申请动态空间就不要申请多余
        strcpy(str[i],line);  //  两个的位置,要注意下···
        printf("%s",str[i]);
        i++;
        str=realloc(str,sizeof(char *));
    }
    fclose(stream);
    return 0;
}
2009-11-17 18:23
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
    int i=0;
    int j=0;
    char **str;
    char line[100];
    FILE *stream;
    stream =fopen("sist.c","r");
    if(stream==NULL)
        printf("error\n");
    str = (char**) malloc (sizeof(char*));  //  或者直接在循环外面先申请好个头···
    while(fgets(line,100,stream)!=NULL)
    {            
        str[i]=(char *)malloc(strlen(line)*sizeof(char)); 
        strcpy(line,str[i]);
        printf("%s",str[i]);
        i++;
        str=realloc(str,sizeof(char *));
    }
    fclose(stream);
    return 0;
}
2009-11-17 18:25
黄色海岸2009
Rank: 1
等 级:新手上路
帖 子:38
专家分:2
注 册:2009-11-7
收藏
得分:0 
谢谢珠海的大哥啊 ,不过程序只输出了4个单词。然后有一大堆我看不懂的东西
说什么:invalid next 0xo8o4a170
还把Memory map 打了下来
为什么啊 ???
难道我的内存有问题?
2009-11-17 19:08
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
我用的是vc6.0,运行7S那后得到的结果为:
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
    int i=0;
    int j=0;
    char **str;
    char line[100];
    FILE *stream;
    stream =fopen("sist.c","r");
    if(stream==NULL)
        printf("error\n");
    while(fgets(line,100,stream)!=NULL)
    {
        if(0 == i)
            str = (char**) malloc (sizeof(char*));  //  用realloc的话,第一次也要
用malloc先申请到空间,然后再增加
        str[i]=(char *)malloc(strlen(line)*sizeof(char));//这里我把100改成了strlen
(line),个人认为既然是申请动态空间就不要申请多余
       strcpy(str[i],line);  //  两个的位置,要注意下···
        printf("%s",str[i]);
        i++;
        str=realloc(str,sizeof(char *));
    }
    fclose(stream);
    return 0;
}Press any key to continue
和代码一样啊···LZ的是什么编译器???
2009-11-17 20:56
快速回复:字符串问题 高手请进
数据加载中...
 
   



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

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