斯盖丸 发表于 2014-5-24 22:05:37

问一个好菜的问题,为什么我没法用指针来复制字符串啊?源代码如下的

#include <stdio.h>

void main()
{
        char *string=" I love SkyOne!";
        char *string1;
        for(;*string!='\0';string++,string1++)
        {
                *string1=*string;
        }
        *string1='\0';

        printf("%s\n",string1);
       
}

把string复制到string1,为什么运行时会非法操作呢?我觉得我程序写得对的呀!唉,我真的好菜

elvo 发表于 2014-5-24 23:08:59

额。。为什么不直接string1=string;而是用这么麻烦的方法,而且还不对,char *string所指向的字符串是存储在常量区的,可读不可写。。。。

牡丹花下死做鬼 发表于 2014-5-24 23:39:04

←_← 我只能说 二楼正解

喜欢散步 发表于 2014-5-26 00:17:49

用函数strcpy();

oggplay 发表于 2014-5-26 00:40:59

这年头都勤快了,有标准库不用,自己写代码了:shock:

AepKill 发表于 2014-5-26 10:09:32

string1未分配内存。

1012662902 发表于 2014-5-26 11:24:56

水一水,更健康。。:lol:

sbwcwusi 发表于 2014-5-26 12:06:29

#include <stdio.h>
#include<string>
void main()
{
      char *string=" I love SkyOne!";
      char *string1= new char[ strlen(string)];
                char*temp = string1;
      for(;*string!='\0';string++,temp++)
      {
                *temp=*string;
      }
      *temp='\0';

      printf("%s\n",string1);
      
}

egbert 发表于 2014-5-26 12:43:27

首先你要给目标字符串分配空间,另外你这里string1++,一直到赋值完成,给*string1 赋值\0,此时string1指针指向了字符串末尾,print的时候要找到下一个\0,使用了未分配的内存,报非法操作应该就是这么来的

barry_2012 发表于 2014-5-26 13:08:06

珍爱程序,远离野指针

ravenhu13 发表于 2014-5-26 18:55:42

楼主,不用那么麻烦,直接把FOR的循环去掉,然后#include <stdio.h>
void main()
{
      char *string=" I love SkyOne!";
      char *string1;
      string1=string;
      printf("%s\n",string1);
}

theonethatgot 发表于 2014-5-26 21:27:41

ravenhu13 发表于 2014-5-26 18:55 static/image/common/back.gif
楼主,不用那么麻烦,直接把FOR的循环去掉,然后

这样只是吧string1指向字符串,并没有实现字符串的复制。在内存还是只有"I love skyone".string和string1都指向它,真正意义上的字符串复制要使内存中出现两个"I love skyone".

和煦 发表于 2014-5-26 22:43:50

你不能用char型,改成string试试

ravenhu13 发表于 2014-5-27 01:59:39

theonethatgot 发表于 2014-5-26 21:27 static/image/common/back.gif
这样只是吧string1指向字符串,并没有实现字符串的复制。在内存还是只有"I love skyone".string和string1 ...

非用指针来实现的话,还要内存中出现两个字符串的话,这也容易只要在楼主原来的基础上添加一个int i=0和i++;就行了,代码如下:#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>


int main(int argc, char* argv[])
{
                char *string=" I love SkyOne!";
                char *string1;

                int i=0;
                for(;string!="\0";string++,string1++)
                {
                        *string1=*string;
                        i++;
                }
                printf("%s\n",string1-i);
                system("pause");
}

ravenhu13 发表于 2014-5-27 02:02:03

elvo 发表于 2014-5-24 23:08 static/image/common/back.gif
额。。为什么不直接string1=string;而是用这么麻烦的方法,而且还不对,char *string所指向的字符串是存储 ...

楼主只是把常量区的数据复制出来堆栈。。。这样应该可以吧。没有要写的操作哦。
页: [1]
查看完整版本: 问一个好菜的问题,为什么我没法用指针来复制字符串啊?源代码如下的