C语言
下列程序中的函数strcpy2()是新啊字符串两次赋值,即将t所指字符串复制两次到s所指内存空间中,合并形成一个新字符串。例如:若t所指字符串为“efgh”,调用strcpy2后,s所指字符串为“efghefgh”。#include<stdio.h>
void strcpy2(char *s,char *t)
{
char *p = t;
while(*s++ = *t++); //这段代码是不是相当于把t的值赋给s?
s = s-1; //这段是干什么用的,s是一个字符指针的首地址,相当于s【0】;那这句话的意思是s【0】=s【0-1】??
while(*s++ = *p++);
}
int main(void)
{
char str1 = "abcd",str[] = "efgh";
strcpy2(str1,str2);
printf("%s\n",str1);
return 0;
} s = s-1; s 是地址。s-1就是地址-1 ba21 发表于 2020-4-7 21:06
s = s-1; s 是地址。s-1就是地址-1
啥意思,它已经是0了,再减一不就变-1了? while(*s++ = *t++); //这段代码是不是相当于把t的值赋给s?
是
s = s-1; //这段是干什么用的,s是一个字符指针的首地址,相当于s【0】;那这句话的意思是s【0】=s【0-1】??
这里是因为上一段过程中s指针已经移动到了数组的末尾,将他减去1可以将指针重新移动到数组的开头,这样下面的代码就可以再复制一份 本帖最后由 ba21 于 2020-4-7 22:18 编辑
老牛来学习 发表于 2020-4-7 21:17
啥意思,它已经是0了,再减一不就变-1了?
s = s-1 是地址-1 没有任何问题,就是地址-1
BngThea 的解释为什么你能理解。这点我是不懂的。反正他的解释我理解不来。
这里是因为上一段过程中s指针已经移动到了数组的末尾,将他减去1可以将指针重新移动到数组的开头
-1 能将指针移到数组开头吗????? 地址-1就是前移1位这是绝对的
printf("%d\n", sizeof(str2)); // ==== 5
所以:
ba21 发表于 2020-4-7 22:16
s = s-1 是地址-1 没有任何问题,就是地址-1
BngThea 的解释为什么你能理解。这点我是不懂的。反正他 ...
感谢大佬,昨天其实看到他的答案之后,自己就想到了,不过看了大佬的答案,理解更深了,感谢
页:
[1]