首页 > 用户发贴区 > 编程问题提问区 > 帮忙看一代码,结果不对!1
2008
01-29

帮忙看一代码,结果不对!1

 我的代码:


/* 标准文档模板 */


#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


帮忙看一代码,结果不对!1》有 4 条评论

  1. xstar 说:

    printf(“str is:%s\nother is:%s”,str,copy(str,m));
    这句执行的时候,在copy中把str指向的值改变了!
    另外你的程序中指针都没分配空间!

  2. wfnh 说:

    为什么在copy中会把str指向的值改变了呢?百思不得其解啊!!另外,想问一下,指针不分配空间会有什么后果呢??

  3. sdxu 说:

    有趣的是我编译你的程序并没有问题。或许你应该更新一下编译器。

  4. xstar 说:

    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);
    }

留下一个回复