копия от начала до последнего найденного вхождения - PullRequest
0 голосов
/ 10 февраля 2012

Как я могу скопировать от начала до последнего найденного вхождения?

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

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

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 голос
/ 10 февраля 2012

Вам понадобится один временный для проверки правильности, а другой для учета длины 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 динамически после того, как вы знаете, как долго это должно быть: char * name = malloc(n + 1); name[n] = 0;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...