| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 551 人关注过本帖
标题:一个c程序很邪的问题
只看楼主 加入收藏
曹操cc
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-4-24
结帖率:100%
收藏
 问题点数:0 回复次数:5 
一个c程序很邪的问题
我用的是Dev-c++编程软件,gcc编译器
程序如下
/*此程序是从a数组中找出与b数组中匹配的第一字符*/
#include <stdio.h>
#include <string.h>
char *f_char(char *,char *);
main()
{
    char a[20]={"this is a student"},b[10]={"uwtar"},*addr=NULL;
    char ch;
    printf("addr=%x\n",addr);
    addr=f_char(a,b);
    printf("addr=%x,a=%x,b=%x\n",addr,a,b);
    ch=*addr;
    printf("匹配的字母是=%c\n",ch);
     system("pause");
     }
char *f_char(char *source,char *chars)
{
   char *m,*n;
   for(n=chars;*n!='\0';n++)
    {
        for(m=source;*m!='\0';m++)
           if(*n==*m)
              return m;
              return NULL;
                          }
                          }
安照上面的源代码编译没有问题,但如果把b[10]得初值改成b[10]="wtar",再编译没问题,但运行将出错。调试时显示“访问违制”段异常。对这个问题很费解,望高手帮忙看看,
搜索更多相关主题的帖子: 编译器 软件 
2009-07-31 18:28
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
收藏
得分:0 
小小修改了一下。。。
正在学习指针。。。
程序代码:
#include <stdio.h>
#include <string.h>
char *f_char(char *,char *);
main()
{
    char a[20]="this is a student",b[10]="war",*addr=NULL;
    char ch;
    printf("addr=%x\n",addr);
    addr=f_char(a,b);
    printf("addr=%x,a=%x,b=%x\n",addr,a,b);
    ch=*addr;
    printf("匹配的字母是=%c\n",ch);
     system("pause");
     }
char *f_char(char *source,char *chars)
{
   int i,j;
   for(i=0;*(chars+i)!='\0';i++)
        for(j=0;*(source+j)!='\0';j++)
            if(*(chars+i)==*(source+j))
                    return(source+j);
   return NULL;
}
2009-07-31 21:00
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
收藏
得分:0 
这里有点不明白,就是
*(chars+i)换成chars[i]
*(source+j)换成source[j]
之后就出现跟lz一样的情况。。。
这两种表示方式不是一样的吗?都是间接寻址,偏移量为i或者j
2009-07-31 21:04
曹操cc
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-4-24
收藏
得分:0 
回复2楼
多谢!问题解决了,但我不了,我的程序错在哪里呢?
2009-08-01 19:48
曹操cc
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-4-24
收藏
得分:0 
我找到问题了
/*此程序是从a数组中找出与b数组中匹配的第一字符*/
#include <stdio.h>
#include <string.h>
char *f_char(char *,char *);
main()
{
    char a[20]={"this is a student"},b[10]={"wtar"},*addr=NULL;
    char ch;
    printf("addr=%x\n",addr);
    addr=f_char(a,b);
    printf("addr=%x,a=%x,b=%x\n",addr,a,b);
    ch=*addr;
    printf("匹配的字母是=%c\n",ch);
     system("pause");
     }
char *f_char(char *source,char *chars)
{
   char *m,*n;
   for(n=chars;*n!='\0';n++)
        for(m=source;*m!='\0';m++)
           if(*n==*m)
              return m;
              return NULL;
                          
                          }
这是我重改过得程序,原来的问题也解决了。删了一对大括号,学习c还真蛮多问题的
2009-08-01 20:07
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
收藏
得分:0 
^_^,托lz的福,我重新运行我的,就是把
*(chars+i)换成chars[i]
*(source+j)换成source[j]
之后编译运行居然没出现问题,莫非……
2009-08-01 23:03
快速回复:一个c程序很邪的问题
数据加载中...
 
   



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

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