我的代码:
/* 标准文档模板 */
#include “Stdio.h”
#include “Conio.h”
char *copy(char *fstr,int n);
int main(void)
{
/* 此处添加你自己的代码 */
char * str=”0″;
int m;
printf(“please input string:”);
scanf(“%s”,str);
printf(“input where you want to copy:”);
scanf(“%d”,&m);
printf(“str is:%s\nother is:%s”,str,copy(str,m));
getch();
}
char *copy(char *fstr,int n) /* 最好判断M是否大于字符串长度!! */
{
int i=0;
static char * str1=”0″;
while(*(fstr+i)!=’\0′)
{
*(str1+i)=*(fstr+n-1+i);
i++;
}
return(str1);
}
输入:123456 m=3
输出:str is =3456(here i can’t understand)!!
other is:3456
>> 本文固定链接: http://www.vcgood.com/archives/2120
printf(“str is:%s\nother is:%s”,str,copy(str,m));
这句执行的时候,在copy中把str指向的值改变了!
另外你的程序中指针都没分配空间!
为什么在copy中会把str指向的值改变了呢?百思不得其解啊!!另外,想问一下,指针不分配空间会有什么后果呢??
有趣的是我编译你的程序并没有问题。或许你应该更新一下编译器。
copy函数以前没看清楚,函数不存在改写值的问题!不过因为改写了不可改写的值,且访问了非法地址,所以结果其实不可预料!
VC6中出現內存訪問錯誤!
#include “Stdio.h”
#include “Conio.h”
char *copy(char *fstr,int n);
int main(void)
{
/* 这里指针指向了一静态常量的地址,该地址上的内容是const类型的不可更改!不过指针的值是可以改的! */
char * str=”0″;
int m;
printf(“please input string:”);
/* 修改了静态变量的值,出错!*/
scanf(“%s”,str);
printf(“input where you want to copy:”);
scanf(“%d”,&m);
printf(“str is:%s\nother is:%s”,str,copy(str,m));
getch();
}
char *copy(char *fstr,int n) /* 最好判断M是否大于字符串长度!! */
{
int i=0;
static char * str1=”0″;
while(*(fstr+i)!=’\0′)
{
*(str1+i)=*(fstr+n-1+i);
i++;
}
return(str1);
}