读书人

应用strcpy时运行出错:unhandled exc

发布时间: 2013-04-02 12:35:26 作者: rapoo

使用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]);
}

}
已改,错误已标出

读书人网 >C++

热点推荐