复制从开始到最后一次发现

时间:2012-02-09 20:00:32

标签: c arrays char

如何从开头复制到最后一次发现?

strncpy(name,long_name,strrchr(long_name,'.')+1);

2 个答案:

答案 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}。