6
回答
求C语言大神,解惑,指针,新手求
滴滴云服务器,限时包月0.9元,为开发者而生>>>   
/* 将指针t指向的字符串复制到指针s指向的位置。*/
#include <stdio.h>
void strcpy()
{
    char *s = "123456";
    char *t = "abcde";
    while ((*s = *t) != '\0')
    {
        s++;
        t++;
    }

}

 

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

<无标签>
举报
艾泽拉斯
发帖于6年前 6回/275阅
共有6个答案 最后回答: 6年前

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的值。

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