鱼C论坛

 找回密码
 立即注册
查看: 2376|回复: 14

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

[复制链接]
发表于 2014-5-24 22:05:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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,为什么运行时会非法操作呢?我觉得我程序写得对的呀!唉,我真的好菜

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-24 23:08:59 | 显示全部楼层
额。。为什么不直接string1=string;而是用这么麻烦的方法,而且还不对,char *string所指向的字符串是存储在常量区的,可读不可写。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-24 23:39:04 | 显示全部楼层
←_← 我只能说 二楼正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-26 00:17:49 | 显示全部楼层
用函数strcpy();
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-26 00:40:59 | 显示全部楼层
这年头都勤快了,有标准库不用,自己写代码了:shock:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-26 10:09:32 | 显示全部楼层
string1未分配内存。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-26 11:24:56 | 显示全部楼层
水一水,更健康。。:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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);
        
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-26 12:43:27 | 显示全部楼层
首先你要给目标字符串分配空间,另外你这里string1++,一直到赋值完成,给*string1 赋值\0,此时string1指针指向了字符串末尾,print的时候要找到下一个\0,使用了未分配的内存,报非法操作应该就是这么来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-26 13:08:06 | 显示全部楼层
珍爱程序,远离野指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-26 21:27:41 | 显示全部楼层

这样只是吧string1指向字符串,并没有实现字符串的复制。在内存还是只有"I love skyone".string和string1都指向它,真正意义上的字符串复制要使内存中出现两个"I love skyone".
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-26 22:43:50 | 显示全部楼层
你不能用char型,改成string试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-27 01:59:39 | 显示全部楼层
theonethatgot 发表于 2014-5-26 21:27
这样只是吧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");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-27 02:02:03 | 显示全部楼层
elvo 发表于 2014-5-24 23:08
额。。为什么不直接string1=string;而是用这么麻烦的方法,而且还不对,char *string所指向的字符串是存储 ...

楼主只是把常量区的数据复制出来堆栈。。。这样应该可以吧。没有要写的操作哦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 03:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表