Меня удивляет, что это еще не упоминалось, поэтому для полноты ...
Вы можете выполнить распаковку списка с помощью оператора «splat»: *
, который также будет скопируйте элементы вашего списка.
old_list = [1, 2, 3]
new_list = [*old_list]
new_list.append(4)
old_list == [1, 2, 3]
new_list == [1, 2, 3, 4]
Очевидным недостатком этого метода является то, что он доступен только в Python 3.5 +.
Сроки, однако, это работает лучше, чем другие распространенные методы.
x = [random.random() for _ in range(1000)]
%timeit a = list(x)
%timeit a = x.copy()
%timeit a = x[:]
%timeit a = [*x]
#: 2.47 µs ± 38.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
#: 2.47 µs ± 54.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
#: 2.39 µs ± 58.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
#: 2.22 µs ± 43.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Функция fgets имеет следующее описание:
char *
fgets(char * restrict str, int size, FILE * restrict stream);
Так зачем делать буфер массивом указателей? char buffer[MAX_INT]
это то, что нам нужно.
И следующее утверждение: if (fp = fopen("/Users/weiyang/code/txt", "r"))
небезопасно, лучше добавить круглые скобки после присваивания.
Хорошо, я нашел ответ.
Добавляя ниже после "ptr = strtok (NULL," ");" просто работал. Я также должен был что-то сделать с частью tagger, потому что она также написана на корейском языке.
ptr = strtok(NULL, " ");
for (i = 0; i < strlen(ptr); i++) {
printf("%c%c", ptr[i], ptr[i + 1]); //if it's korean, then print two bytes
i++;
}