если я делаю путь к файлу, какой из них быстрее? - PullRequest
0 голосов
/ 07 апреля 2019

Итак, я делаю код для создания пути к файлу из имени.

sprintf(FilePath, "%s/%s", DirPath, FileName);

и

strcpy(FilePath, DirPath);
strcat(FilePath, "/");
strcat(FilePath, FileName);

Что из этого быстрее / что мне следует использовать?В обоих случаях у меня недостаточно памяти.

Ответы [ 3 ]

1 голос
/ 07 апреля 2019
  • не вызывайте strlen() более одного раза для любой строки
  • вместо: запомнить длину и повторно использовать ее
  • вычисляет позицию , где вы находитесь в строке
  • помните, что strcat() необходимо каждый раз заново сканировать строку назначения, чтобы найти текущий конец , ведущий к квадратичному поведению

static char *construct_path(char*pathname,char*filename)
{
char *result;
size_t plen, flen;

plen = strlen(pathname);
flen = strlen(filename);

result= malloc(plen+flen+2);
if(!result)return NULL;

memcpy(result, pathname, plen);
result[plen]='/';
memcpy(result+plen+1, filename, flen);
result[plen+1+flen] = 0;

return result;
}

Обычно вызывающий абонент уже может знать strlen(), например, для постоянных путей.

0 голосов
/ 07 апреля 2019

С POSIX вы можете написать

p = FilePath;
p = stpcpy(p, DirPath);
*p++ = '/';
p = stpcpy(p, Filename);
0 голосов
/ 07 апреля 2019
sprintf(FilePath, "%s/%s", DirPath, FileName);

быстрее, потому что вторая версия должна дважды вычислять конец строки в вызовах функции strcat.

sprintf создает строку, сохраняя последний символ строки все времянет необходимости пересчитывать его.

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