c - 如何将字符串的一部分分配给C语言中的变量
问题描述
我正在尝试解决家庭作业,但我陷入了这个问题,因为我习惯了 Python,而不是 C。
我想要一段代码,可以将单词中的最后 2 个字符放入变量中。
例如
Word: Hello
newVar = "lo"
Word: Sorry
newVar = "ry"
请保持简单,如果您想使用某些东西,请尝试解释它。
解决方案
让我们为您创建字符串:
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]);
推荐阅读
- java - ContextWrapper.registerReceiver() 函数如何动态注册接收者?
- python - IndexError:列表索引超出范围/ Facenet
- git - smartgit上分支窗口中的箭头
- sql - 编写查询以从表 A 派生表 B
- firebase - Flutter firebase_messaging iOS应用程序在前台应用程序时未收到推送通知
- node.js - 为什么console.log在nodejs的app.js中出现两次
- mysql - mysql - 计算两个日期之间的差异
- c# - LINQ order by another property is first property is equal to a given value
- search - 将列表转换为节点指针
- kubernetes - 使用 Katacoda 跟踪 Kubernetes