求C语言大神,解惑,指针,新手求

艾泽拉斯 发布于 2012/04/19 11:54
阅读 284
收藏 0
/* 将指针t指向的字符串复制到指针s指向的位置。*/
#include <stdio.h>
void strcpy()
{
    char *s = "123456";
    char *t = "abcde";
    while ((*s = *t) != '\0')
    {
        s++;
        t++;
    }

}

 

这端代码是不是把t位置的内容复制给s位置的内存,还是把s和t的值互换了

加载中
0
拉菲一箱
拉菲一箱
能执行?
艾泽拉斯
不能执行
0
cntoby
cntoby
编译执行一下打印结果不就知道答案了,为什么非要问别人哪?
艾泽拉斯
执行出错呢
0
牧北
牧北

s和t是char类型的指针变量,指向内存地址(s和t的值是char类型常量或变量的内存地址,在你的代码里就是“123456”和"abcde"两个串的内存首地址)。在你的代码里s和t都分别指向char型常量"123456"和"abcde",既然是常量又怎么能“把t位置的内容复制给s位置的内存”?

要改变两个指针的指向只需要以下操作:

char *s = "123456";  

char *t = "abcde";

char *tmp;

tmp = s;

s = t;

t = tmp;

说白了就是将 "123456"的内存首地址值赋给指针变量t,"abcde"的内存首地址值赋给指针变量s。在这里改变的是变量s和t的值。

牧北
牧北
都告诉你了【在你的代码里s和t都分别指向char型常量"123456"和"abcde",既然是常量又怎么能“把t位置的内容复制给s位置的内存”?】???常量的值是不能改变的?就是说你要实现的功能违背了C语言的语法规则了。所以说是办不到的了。。。
艾泽拉斯
我的意思是 将指针t指向的字符串复制到指针s指向的位置 指针不变,变得是指针指向的内容,你的这个意思 是改变指针了,指针指向的内容没变
0
牧北
牧北
你的代码编译能通过,但运行时出现段错误。。。
艾泽拉斯
嗯,编译没问题,执行就不行了
0
中山野鬼
中山野鬼
这段内容是把t 给了s。 但是t,s指向的空间会段保护。禁止写操作。楼上的回答是正解。
中山野鬼
中山野鬼
回复 @艾泽拉斯 : 你在尝试对一个不改写的区域进行赋值操作。而不是说不可以改变指针指向的内容。
cha0xc
cha0xc
哦, 原来是这么回事。
艾泽拉斯
那意思就是说,只可以改变指针,不可以改变指针指向的内容吗
中山野鬼
中山野鬼
回复 @larry0 : 硬件检测到的指针非法动作。OS截获回来,给你的信息。绝大多数情况是段错误。
cha0xc
cha0xc
Segmentation fault 这个就是段保护产生的结果么?
0
cntoby
cntoby
他这种t++,s++,已经把这些指针移到\0这个位置了
cntoby
cntoby
回复 @中山野鬼 : char *s = "123456"; char *t = "abcde"; while ((*s = *t) != '\0') 当这个停止时,t已经指向保存'\0'的地址,而s应该指向原来保存字符6而已经发成'\0'的地址,应该可以这样理解吧
中山野鬼
中山野鬼
非也,指针还是对常量表的指向。指针为0也会出现段错误。但不是上述情况。
返回顶部
顶部