Как скопировать переднюю часть строки до разделителя - PullRequest
4 голосов
/ 04 сентября 2011

Мне нужно захватить первую часть строки вплоть до последней обратной косой черты в пути, включая ее.Я довольно новичок в C. Поэтому мне было интересно, является ли следующий код хорошим подходом?Или есть способ получше?

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[]) {

   char szPath[260] = {0};
   strcpy(szPath, argv[0]);
   char* p = szPath;

   size_t len = strlen(argv[0]);
   p+=len;  //go to end of string

   int backpos = 0;
   while(*--p != '\\')
       ++backpos;

   szPath[len-backpos] = 0;

   printf("%s\n", szPath);

   return 0;
}

После получения комментариев изменился на этот:

char szPath[260];
strcpy(szPath, argv[0]);

/*Scan a string for the last occurrence of a character.*/
char *p = strrchr(szPath, '\\');  

if (p) {
    *(p + 1) = 0;  /* retain backslash and null terminate after that */
} else {
    /* handle error */
}

printf("%s\n", szPath);

1 Ответ

7 голосов
/ 04 сентября 2011

Я бы пошел с strrchr. Предполагается, что str указывает на доступную для записи память:

char *p;
if ((p = strrchr(str, '\\'))
    *(p + 1) = 0; /* Since we passed it to strrchr, it's 0-terminated. */

Очевидно, что basename и dirname могут быть там, если вы работаете с путями, и могут быть более подходящими.

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