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