问一个好菜的问题,为什么我没法用指针来复制字符串啊?源代码如下的
#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,为什么运行时会非法操作呢?我觉得我程序写得对的呀!唉,我真的好菜
额。。为什么不直接string1=string;而是用这么麻烦的方法,而且还不对,char *string所指向的字符串是存储在常量区的,可读不可写。。。。 ←_← 我只能说 二楼正解 用函数strcpy(); 这年头都勤快了,有标准库不用,自己写代码了:shock: string1未分配内存。 水一水,更健康。。:lol: #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);
} 首先你要给目标字符串分配空间,另外你这里string1++,一直到赋值完成,给*string1 赋值\0,此时string1指针指向了字符串末尾,print的时候要找到下一个\0,使用了未分配的内存,报非法操作应该就是这么来的 珍爱程序,远离野指针 楼主,不用那么麻烦,直接把FOR的循环去掉,然后#include <stdio.h>
void main()
{
char *string=" I love SkyOne!";
char *string1;
string1=string;
printf("%s\n",string1);
} ravenhu13 发表于 2014-5-26 18:55 static/image/common/back.gif
楼主,不用那么麻烦,直接把FOR的循环去掉,然后
这样只是吧string1指向字符串,并没有实现字符串的复制。在内存还是只有"I love skyone".string和string1都指向它,真正意义上的字符串复制要使内存中出现两个"I love skyone". 你不能用char型,改成string试试 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");
} elvo 发表于 2014-5-24 23:08 static/image/common/back.gif
额。。为什么不直接string1=string;而是用这么麻烦的方法,而且还不对,char *string所指向的字符串是存储 ...
楼主只是把常量区的数据复制出来堆栈。。。这样应该可以吧。没有要写的操作哦。
页:
[1]