C strtok () неправильно маркирует? - PullRequest
0 голосов
/ 10 ноября 2019

Я уже некоторое время пытаюсь понять это, и у меня нет абсолютно никакой подсказки, как это исправить. У меня довольно приличный размер проекта, и я использую strtok бесчисленное количество раз без каких-либо проблем, но он здесь не работает. Пожалуйста, помогите: (

Редактировать: я искал удаление префикса, а не strtok. Я оставляю это здесь, если кто-то смущен и гуглит это.

Это код вопроса:

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

int main()
{
   char root[1000]; 
   char home[1000];

   strcpy(root,"/Users/me/Desktop/my-project"); // this is working
   strcpy(home,"/Users/me/Desktop/my-project/home"); // this is working

   strtok(home,root); // here's the problem

   printf("%s",home);
}

Результат 1:

/Users/me/Desktop/my-project/h

Я также пробовал:

char *ptr = strtok(home,root);

printf("%s",ptr);

Результат 2:

h

Разве оба не должны возвращать /home?

1 Ответ

0 голосов
/ 10 ноября 2019

, как указал @paxdiablo, и поскольку я использовал его во всем своем проекте (я не спал, так что простите меня), strtok(char * str, char * delimiters) берет список разделителей.

Кем я былна самом деле я пытался удалить подстроку root из строки home.

Поскольку они всегда начинаются с одной и той же подстроки /Users/me/Desktop/my-project, я могу найти часть, уникальную для homeсразу после окончания root, и это можно сделать очень легко:

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

int main()
{
   char root[1000]; 
   char home[1000];

   strcpy(root,"/Users/mbp/Desktop/my-project");
   strcpy(home,"/Users/mbp/Desktop/my-project/home");

   int n = strlen(root); // length of the root string

   // where to copy, from where to start copying, how many to copy
   strncpy(home, home + n ,strlen(home)-1); 

   printf("%s",home);
}

Итак, что я делаю:

  1. получаем длину корня, чтобы знать, где он заканчивается
  2. перезаписать то, что хранится в доме, скопировав деталь из home[n] в home[strlen(home)-1]

Результат:

/home
...