首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

应用strcpy时运行出错:unhandled exception in xxx:access violation

2013-04-02 
使用strcpy时运行出错:unhandled exception in xxx:access violation本人初编小程序一段,用的是VC++6.0,练

使用strcpy时运行出错:unhandled exception in xxx:access violation
本人初编小程序一段,用的是VC++6.0,练习字符串以及指针的处理,但是问题重重,目前卡在了子函数void maxstring(char **p)中,运行至strcpy(pp,*p++)时出错,麻烦高手帮忙看看问题在哪,另外,程序虽然编译是通过了,但是感觉肯定还有些别的问题,运行时估计还会出错,恳请高手对这段烂程序提些建议,谢谢~~

#include <stdio.h>
#define N 4
#include <string.h>
#include <malloc.h>

//using namespace std;


void main(void)
{
    char *p[N];//
 char *a="\0";
 char c,d;

 int i=0;

    void maxstring(char **p);
    char *deletestring(char **p,char *a);
    void replaceString(char *p,char c,char d);


    printf("plese enter %d strings:\n",N);
    for(i=0;i<N;i++)
 {
  p[i]=(char*)malloc(100*sizeof(char));
  scanf("%s", &p[i]);//?为何要加&——相当于二维数组
 }

    maxstring(p);

 printf("please enter the string to be deleted \n");
 scanf("%s",a);

 deletestring(p, a);//使用过程中无需标明返回类型
//    void deletestring(char *p,char a);

 printf("please enter the char to be replaced by the second char: \n");
 scanf("%c %c",&c,&d);//字符需要&
 //c=getchar();


 replaceString(*p,c,d);
}

void maxstring(char **p)

{
    
 int ii;
 char *pp="\0";
    //char pp[100];
 //char *pp;
 
    printf("in maxstring\n");//mark
    strcpy(pp,*p++);//注意//运行错///////////////////////////////?//////////////////
   
 printf("in maxstring2\n");//mark
 for(ii=1;ii<N;p++)
  if(strcmp(pp,*p)<0)//此处不能用p[ii]
   strcpy(pp,*p);
 printf("the maximum string is:\n");
 puts(pp);
}

char *deletestring(char **p,char *a)  
{
    int ii,i;
 char *ppp;
 char *q;
    for(ii=0;ii<N;p++)
 {
  *ppp='\0';
  for(*q=*p[ii];q!='\0';q++)
   if(*q!=*a)
    *ppp++=*q;
            *ppp='\0';
  strcpy(*p,ppp);
 }
 printf("delete %c:\n",a);
 for(i=0;i<N;i++)
 {
 puts(p[i]);/////  
 putchar('\n');
 }
 return(*p);
}

void replaceString(char *p,char c,char d)
{
 char *q;
 int i;
    for(i=0;i<N;i++)
 {
     for(*q=p[i];q!='\0';q++)
   if(*q==c)
    *q=d;
        puts(&p[i]);
 }

}

c string C++ strcpy 子函数
[解决办法]
 strcpy需要一个指针,你却传了个char给他,然后strcpy到这个char数值的地址上取值 
------解决方案--------------------


#include <stdio.h>
#define N 4
#include <string.h>
#include <malloc.h>

//using namespace std;


void main(void)
{
    char *p[N];//
 char *a="\0";
 char c,d;

 int i=0;

    void maxstring(char **p);
    char *deletestring(char **p,char *a);
    void replaceString(char *p,char c,char d);


    printf("plese enter %d strings:\n",N);
    for(i=0;i<N;i++)
 {
  p[i]=(char*)malloc(100*sizeof(char));
  scanf("%s", p[i]);//这里刚好相反,不需要+&,指针名就是地址
 }

    maxstring(p);

 printf("please enter the string to be deleted \n");
 scanf("%s",a);

 deletestring(p, a);//使用过程中无需标明返回类型
//    void deletestring(char *p,char a);

 printf("please enter the char to be replaced by the second char: \n");
 scanf("%c %c",&c,&d);//字符需要&
 //c=getchar();


 replaceString(*p,c,d);
}

void maxstring(char **p)

{
    
 int ii;
 char *pp=(char* )malloc(sizeof *p);
    //char pp[100];
 //char *pp;
 
    printf("in maxstring\n");//mark
    strcpy(pp,*p);//原来那样写,pp的容量不够
   
 printf("in maxstring2\n");//mark
 for(ii=0;ii<N;ii++,p++)//你原来写的是对p指针++,p+3之后都是空的,没法比较
  if(strcmp(pp,*p)<0)//此处不能用p[ii]
   strcpy(pp,*p);
 printf("the maximum string is:\n");
 puts(pp);
}

char *deletestring(char **p,char *a)  
{
    int ii,i;
 char *ppp;
 char *q;
    for(ii=0;ii<N;p++)
 {
  *ppp='\0';
  for(*q=*p[ii];q!='\0';q++)
   if(*q!=*a)
    *ppp++=*q;
            *ppp='\0';
  strcpy(*p,ppp);
 }
 printf("delete %c:\n",a);
 for(i=0;i<N;i++)
 {
 puts(p[i]);/////  
 putchar('\n');
 }
 return(*p);
}

void replaceString(char *p,char c,char d)
{
 char *q;
 int i;
    for(i=0;i<N;i++)
 {
     for(*q=p[i];q!='\0';q++)
   if(*q==c)
    *q=d;
        puts(&p[i]);
 }

}
已改,错误已标出

热点排行