函数实现 -- 分割字符串,并获取最后一段字符串
程序员文章站
2022-06-01 15:45:52
...
在写myshell的时候, 发现系统shell会显示当前目录, 也想实现这样的效果, 但是我只找到了一个函数
char *getcwd( char *buffer, int maxlen );
//功 能:获取当前工作目录
//参数说明:getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中
//参数maxlen为buffer的空间大小。
//返 回 值:成功则返回当前工作目录,失败返回 FALSE。
它只能获取当前工作目录的绝对路径, 绝对路径太长了, 我想要shell显示的这样
只显示当前目录, 就想有没有办法只获取最后的一段目录
想到一个函数
char *strncpy(char *dest, const char *src, int n);
//把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中
//并返回dest。
但是他只能复制前 n 个字节啊
/home/rjm/Study/Linux/myshell
我发现, 绝对路径是这样的, 他们以 / 为分隔符
想到一个函数, 可以分割字符串
char *strtok(char s[], const char *delim);
//分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。
//例如:strtok("abc,def,ghi",","),最后可以分割成为abc def ghi
//尤其在点分十进制的IP中提取应用较多。
//如果s为空值NULL,则函数保存的指针SAVE_PTR在下一次调用中将作为起始位置
//也就是说,在第一次调用时,strtok()必需给予参数s字符串
//往后的调用则将参数s设置成NULL
于是可以把这个绝对路径以 / 分割成一段段字符串, 然后取最后一段就可以了
那么怎么才能取到最后一段呢?
我们可以定义一个二维数组, 保存分割的字符串, 然后只取最后一个数组中的字符串
函数实现代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define ROW 100
#define COL 100
char *cutOut(char str[], const char *delim, char **catalog)
{
char *result = NULL;
//char *strtok(char s[], const char *delim);
result = strtok( str, delim );
char msg[ROW][COL];
int i = 0;
for(i = 0; result != NULL; i++)
{
strcpy(msg[i], result);
//printf("msg[%d] = %s", i, msg[i]);
//printf("\n");
result = strtok( NULL, delim );
}
*catalog = msg[i - 1];
//printf("catalog = %s\n", *catalog);
return *catalog;
}
//用法
void useAge()
{
char *msg = (char *)malloc(100);
//char *getcwd(char *buf, size_t size);
//作用:把当前目录的绝对地址保存到 buf 中,buf 的大小为 size。
//如果 size 太小无法保存该地址,返回 NULL 并设置 errno 为 ERANGE。
//可以采取令 buf 为 NULL并使 size 为 0 来使 getcwd 调用 malloc 动态给 buf 分配
//但是这种情况要特别注意使用后释放缓冲以防止内存泄漏。
getcwd(msg, 100);
printf("msg = %s\n", msg);
char delim[] = "/";
char *catalog;
cutOut(msg, delim, &catalog);
printf("catalog = %s\n", catalog);
free(msg);
}
int main()
{
useAge();
}
于是乎, myshell就可以以假乱真啦
你能看出哪个才是我的 myshell 吗? 哈哈哈
上一篇: SparkSQL-01
推荐阅读
-
MySQL里实现类似SPLIT的分割字符串的函数
-
js与jQuery实现获取table中的数据并拼成json字符串操作示例
-
获取字符串数组的最后一段字符
-
面试题-给定一段文本,找到包含字段串a,同时剔除包含字符串b的行,然后使用“:”分割取所有列,最后对结果排序,统计每个值出现的次数
-
Oracle 两个逗号分割的字符串,获取交集、差集(sql实现过程解析)
-
SQL Server实现split函数分割字符串功能及用法示例
-
MySQL里实现类似SPLIT的分割字符串的函数_MySQL
-
js与jQuery实现获取table中的数据并拼成json字符串操作示例
-
函数实现 -- 分割字符串,并获取最后一段字符串
-
获取字符串数组的最后一段字符