| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1113 人关注过本帖
标题:[求助] 请教各位大侠,我的 c 函数哪出问题了,总是有错误
取消只看楼主 加入收藏
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
结帖率:91.67%
收藏
已结贴  问题点数:11 回复次数:9 
[求助] 请教各位大侠,我的 c 函数哪出问题了,总是有错误
#include <string.h>
#include <stdio.h>

void strsplit(char *str, char *by, char *st[])
{
    int i=0, n=strlen(str);
    char *p;
    p = strtok(str, by);
    while (p != NULL)
    {
        strcpy(st[i], p);
        p = strtok(NULL, by);
    }               
    return;
}



void main( void )
{
    char *string = "y ~ sire + dam + herd + herd*dam, ~    litter + xran";
    char *seps = "+";
    char **token;
    char x[5][30];
    *token=x[0];
    int i=0;
    printf( "%s\n\nTokens:\n", string );

    strsplit(string, seps, token);

    for (i=0; i<5; i++)
    {
        printf( " %s\n", x[i] );
    }
}

搜索更多相关主题的帖子: 函数 
2010-11-25 10:18
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:0 
我拿gcc编译了,可以通过,就是运行时出错。估计是指针的问题。但不知问题在哪里。
2010-11-25 10:43
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:0 
问题是编译后根本运行不了,会出错。
2010-11-25 10:59
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:0 
对,好像运行时也会发生错误。
2010-11-25 11:45
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:0 
我用gcc编译后可不是这个结果。不知为什么?你的结果是对的。
2010-11-25 12:23
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:0 
编译出错:

I:\Academic\GS>gcc str.c -o str
str.c: In function 'strsplit':
str.c:10:9: warning: passing argument 1 of 'strcpy' from incompatible pointer type
c:\mingw\bin\../lib/gcc/mingw32/4.5.0/../../../../include/string.h:45:39: note: expected 'char *' but argument is of type 'char (*)[30]'
2010-11-25 12:30
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:0 
我的gcc(Windows下)无法编译通过。对函数做了如下修改,编译通过了。运行出错结果见附件。
void strsplit(char *str, char *by, char (*st)[30])
{
     int i=0;
    char *p;
    p = strtok(str, by);
    while (p != NULL)
    {
        strcpy(st[i], p);
        i++;
        p = strtok(NULL, by);
    }              

    return;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-11-25 12:39
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:0 
依旧出现上述同样的错误。弹出“遇到问题需要关闭”的对话框。我都晕了,感觉挺简单,就是作不出来。
2010-11-25 13:58
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:0 
终于在gcc下弄出来了,结果居然是这样的:
void strsplit(char *str, char *by, char *st[])
{
    int i=0, n=strnchr(str,'+')+1;
    char *p;
    p = strtok(str, by);
    while (p != NULL)
    {
        strcpy(st[i], p); i++;
        p = strtok(NULL, by);
    }  
    return;
}

void main( void )
{
    char str[] = "y ~ sire + dam + herd + herd*dam, ~    litter + xran"; //写成*str不行
    char *seps = "+";
    char x[5][30];     //直接写成*x[5]调用不行   
    char * t[5];
    int i;
    for(i=0;i<5;i++)   //
        t[i]=x[i];    //少了这个循环不行
    printf( "%s\n\nTokens:\n", str );  
    strsplit(str, seps, t);   
    for (i=0; i<5; i++)
    {
        printf( " %s\n", x[i] );
    }
}

不知xiaoran看了晕不晕。反正我没有想到是这个情况。看起来很简单,却很这么复杂,无语。
2010-11-26 10:22
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:0 
是xiaomarn,对不起,敲错名字了。谢谢你!
2010-11-26 10:24
快速回复:[求助] 请教各位大侠,我的 c 函数哪出问题了,总是有错误
数据加载中...
 
   



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

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