首页 > 解决方案 > 如何将字符串的一部分分配给C语言中的变量

问题描述

我正在尝试解决家庭作业,但我陷入了这个问题,因为我习惯了 Python,而不是 C。

我想要一段代码,可以将单词中的最后 2 个字符放入变量中。

例如

Word: Hello
newVar = "lo"

Word: Sorry
newVar = "ry"

请保持简单,如果您想使用某些东西,请尝试解释它。

标签: c

解决方案


让我们为您创建字符串:

char word[] = "Hello";

如果我们“绘制”字符串在内存中的样子,它将是这样的:

+-----+-----+------+------+------+------+
| 'H' | 'e' | 'l' | 'l' | 'o' | '\0' |
+-----+-----+------+------+------+------+

现在要获取字符串的结尾,最后一个'l''o'我们可以简单地创建一个指向 last 的指针'l'

char *pointer_to_last_l = &word[3];

此指针可用作任何其他以 null 结尾的字符串:

printf("end of string is %s\n", pointer_to_last_l);

如果您确实需要制作副本,则创建一个新数组并用于strcpy从您想要的角色中复制。


C 中的“字符串”只不过是一个字符序列,由特殊的字符终止(不要与空指针混淆)。

当您将字符串传递给函数时,您真正传递的是指向此类序列中第一个字符的指针。通常这是指向数组中第一个字符的指针。

但是没有什么要说的,指针必须指向数组中的第一个字符。如果我们printf从上面接听电话:

printf("end of string is %s\n", pointer_to_last_l);

该变量pointer_to_last_l指向数组中的第四个字符。所以printf函数会认为你传递的字符串只是"lo".

因此,要将这个子字符串复制到一个新数组,该数组是您用作源的指针:

char new_word[8];  // Enough space for a small string
strcpy(new_word, &word[3]);

推荐阅读