| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1350 人关注过本帖
标题:*arr[i]++=*ar++; 为什么单步调试到这一条语句 就提示:“程序访问了非法地 ...
取消只看楼主 加入收藏
skyone2013
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-4
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
*arr[i]++=*ar++; 为什么单步调试到这一条语句 就提示:“程序访问了非法地址”。
*arr[i]++=*ar++; 为什么单步调试到这一条语句 就提示:“程序访问了非法地址”。
2013-07-21 23:13
skyone2013
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-4
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#define MAX 12

int main()
{
 char *arr[MAX],*ar;
 int i=0,j=0;
 ar="AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL";
  while(*ar!='\0')
{
    while(*ar!=' '&&*ar!='\0')
      *arr[i]++=*ar++;

      *arr[i]='\0';
      ++ar;
      i++;
 }

for(j=0;j<i;j++)
 {
 arr[j]-=3;
 puts(arr[j]);
 }
 return 0;
 }

希望的显示结果是:
AAA
BBB
CCC
DDD
EEE
FFF
GGG
HHH
III
JJJ
KKK
LLL
2013-07-22 02:18
skyone2013
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-4
收藏
得分:0 
这里能发图吗,我把MAX 改的越大,输出结果就越离谱,比如改成MAX=20
输出结果就是
HHH
HHH
HHH
HHH
HHH
HHH
HHH
III
JJJ
KKK
LLL
2013-07-22 10:41
skyone2013
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-4
收藏
得分:0 
谢谢 wp231957 写出的一段代码,但是我就是想知道为什么 用*arr[i]++=*ar++;这个语句就是出现异常,真的是越界吗,我的数组定义有问题吗
2013-07-22 10:44
skyone2013
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-4
收藏
得分:0 
空间不够 是因为MAX的值小了吗(只要MAX的值大于8 输出就会出错),还是需要数组的定义的问题,如果我使用*arr[i]++=*ar++;这条语句的话,应该怎样定义 才能不越界,空间够用。求解!

[ 本帖最后由 skyone2013 于 2013-7-22 11:26 编辑 ]
2013-07-22 10:52
skyone2013
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-4
收藏
得分:0 
我把*arr[i]++ = *ar++改成 *(*arr)++=*ar++; 定义由*arr[12]改成**arr,这样的话还需要申请空间吗,如果不申请char **arr里面可以存放的内容是多大容量。修正代码如下。

#include<stdio.h>
#include<stdlib.h>

void main(void)
{
 char **arr,*ar,**mami;
 int i=0,j=0,k=0,g=0,z=0;
 ar="AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL MMM NNN OOO PPP QQQ RRR";
   while(*ar!='\0')
 {
    while(*ar!=' '&&*ar!='\0')
      {
       *(*arr)++=*ar++;
       k++;
      }
       **arr='\0';
        *arr-=k;
       puts(*arr);
       k=0;

      if(*ar=='\0')
       break;
        g++;
      ++arr;
      ++ar;
 }
}
2013-07-23 10:30
skyone2013
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-4
收藏
得分:0 
*arr-=k 相当于 for(i=0;i<g;i++)  arr[i]=arr[i]-k;

*(arr)++ 相当于 arr[i][j++];
2013-07-23 15:21
快速回复:*arr[i]++=*ar++; 为什么单步调试到这一条语句 就提示:“程序访问了非 ...
数据加载中...
 
   



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

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