【发布时间】:2019-10-24 08:21:40
【问题描述】:
这是我几天后在学校要参加的考试中可能会出现的问题之一。在最后一次 strcpy() 调用之后,我无法理解 char* s2 如何从“消息服务”更改为 “ice”。我认为这是指针的某种结果,但这就是我所知道的。
char s1[] = "Short Message Service";
char *s2, *s3;
s2 = strchr(s1, 'M');
s3 = strrchr(s2, 'S');
strncpy(s1 + 1, s2, 1);
strcpy(s1 + 2, s3);
我尝试调试程序并观察变量和指针的变化,但我仍然不明白最后一次调用如何影响 char *s2。
我希望 s2 的值是“消息服务”,但实际输出结果却是“冰”。不过,我确实了解 s1 和 s3 如何以及为什么会发生变化。
【问题讨论】:
-
s2 指向 s1 的子串。因此,在更改 s1 的内存时,您也可以更改 s2。这就是发生的事情。
-
strchr和strrchr各自返回一个指向原始字符串参数内部某处的指针。如果您随后更改了该字符串的内容,那么这些指针指向的任何内容也会受到影响,因为它们是同一字符串的一部分。您应该仔细阅读字符串函数的手册页。 -
@xing 谢谢你的建议,但这是一道C理论题,我需要在调用strcpy和strchr命令后写下s1、s2和s3的结果。
-
谢谢你们的回答,伙计们,但我想知道有人能解释一下调用函数时到底发生了什么吗?我知道这是因为指针,并且指向的子字符串正在发生变化,但我想知道为什么它最终会变成“冰”。
标签: c string pointers char strcpy