从另一个字符串限制字符串

布雷特约瑟夫

我有

char filemem[14], *file, *path;
file = strcpy(filemem,"/path/to/file");
path = file - 4;

我想要char *path = file - 4这样的char *path只读取/path/to/. 是否可以显示指针的一部分而不必将字符串的副本创建到另一个内存中

在 C 中,字符串总是以 NUL 字节 ( '\0')结尾

char *path = file - 4将指向file指针前面四个字节的地址这并不意味着“将字符串截断四个字节”。

为了截断一个字符串,你必须在你想要的最后一个字符后面放置一个 NUL 字节。如果您的字符串是只读的,您必须有额外的内存来复制所需的字符。没有办法让 C 字符串的切片在 NUL 终止字节之前结束,并且仍然对期望 NUL 终止字符串的函数有效。

一些例子:

修改现有字符串:

int main(void) {
    char file[] = "/path/to/file";
    strrchr(file, '/')[1] = '\0';

    puts(file);
}

从只读内存中复制子字符串:

char *repath(const char *path) {
    size_t len = strrchr(path, '/') - path + 1;
    return strncpy(calloc(len + 1, 1), path, len);
}

int main(void) {
    const char *file = "/path/to/file";
    char *fileless = repath(file);

    puts(fileless);
    free(fileless);
}

(为简洁起见,两个示例中都省略了错误处理。strrchr并且calloc可以返回 NULL。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

字符串的排列受另一个字符串的限制

用另一个字符串环绕字符串

字符串包含另一个字符串

在另一个字符串的开头插入字符串

如果字符串在另一个字符串内

计算一个字符串在另一个字符串中每个字符的出现次数

用字符串中的另一个字符替换“字符”

将一个字符串插入另一个

检查字符串是否包含另一个字符串的3个字符长的子字符串

C strcpy复制字符串并添加另一个字符

如何检查一个变量是否等于一个字符串或另一个字符串?

如何检查一个变量是否等于一个字符串或另一个字符串?

如何根据替换字符将一个字符串的值替换为另一个字符串?

JavaScript获取字符串在另一个字符串中的最后一个字符的位置

检查一个字符串是否包含Ruby中另一个字符串的所有字符

检查一个字符串是否在另一个字符串中的任何字符的最佳方法javascript

检查一个字符串是否具有另一个字符串的所有字符

PHP-检查一个字符串是否包含另一个字符串中的任何字符

用不包括模式的另一个字符串替换字符串中的一个字符

查看一个字符串是否以另一个字符串的结尾字符开头?

从SQL Server中的另一个字符串获取仅字符字符串

用另一个字符串替换字符串中的字符?

将字符串与另一个字符串的字符进行比较?

无法用另一个字符串替换字符串中的字符

Bash命令确定一组字符串中的哪个字符串是另一个字符串的前缀

查找一个字符串中有多少个条目在另一个字符串中

替换一个字符串,并用另一个字符串创建一列

如何在Shell中获取另一个字符串中一个字符串的行号

排序一个字符串数组,使用另一个字符串数组确定顺序