| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1113 人关注过本帖
标题:[求助] 请教各位大侠,我的 c 函数哪出问题了,总是有错误
只看楼主 加入收藏
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
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:0 
指针类型不匹配:
强制转换一下
strcpy((char*)st, p);
程序代码:
#include <string.h>
#include <stdio.h>

void strsplit(char *str, char *by, char (*st)[30])
{
    char *p;
    p = strtok(str, by);
    while (p != NULL)
    {
        strcpy((char*)st, p);
        st++;
        p = strtok(NULL, by);
    }             


    return;
}



int
main( void )
{
    char *string = "y ~ sire + dam + herd + herd*dam, ~    litter + xran";
    char *seps = "+";
    char (*token)[30];
    char x[5][30];
    int i;
    token=x;

    i=0;
    printf( "%s\n\nTokens:\n", string );

    strsplit(string, seps, token);

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

2010-11-25 13:24
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
iceworldfb
Rank: 1
等 级:新手上路
帖 子:5
专家分:9
注 册:2010-11-25
收藏
得分:2 
回复 2楼 刘定邦
主函数里面不用定义  定义的话也是在主函数之前
2010-11-27 11:29
快速回复:[求助] 请教各位大侠,我的 c 函数哪出问题了,总是有错误
数据加载中...
 
   



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

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