如何从开头复制到最后一次发现?
strncpy(name,long_name,strrchr(long_name,'.')+1);
答案 0 :(得分:2)
strrchr()
返回指向最后一次出现的指针。从中减去指向字符串开头的指针,你就得到了长度。
strncpy(name,long_name, strrchr(long_name,'.') - long_name);
但是,不 null会自动终止name
。确保首先将其初始化为所有\0
。另请注意,如果角色不存在,strrchr()
将返回NULL
。你可能想把它移到strncpy()
之外并检查以确保你有一个有效的指针。
char *last = strrchr(long_name,'.');
if (last != NULL)
strncpy(name,long_name, last - long_name);
修改:我假设您在帖子的strrchr()
中输入了变量名称 - 它应该是long_name
答案 1 :(得分:1)
您需要一个临时检查有效性,另一个需要考虑name
的长度:
char name[N] = { };
const char * const p = strrchar(long_name, '.');
unsigned int const n = p - long_name;
strncpy(name, long_name, p ? (n < N ? n : N) : 0);
或者,您可以在知道它应该有多长时间之后动态分配name
的内存。{/ 1}。