Процесс заключается в использовании функции strtok
. Функция выполняет замену разделителя (в данном случае ,
) на символ \0
(ноль). Затем он возвращает указатель на начало строки, которая теперь заканчивается на \0
. Если запустить снова с пропущенным в него значением NULL, он будет снова разделен на основе разделителя (если он существует) и вернет указатель на вторую часть строки. Ниже приведен код, который необходимо добавить:
#include <string.h>
char* var1;
char* var2;
А затем в вашем цикле while:
{
var1 = strtok(text,",");
var2 = strtok(NULL,",");
printf("%s<NOT A ','>%s\n", var1,var2);
}
То, что это делает со строковым текстом, выглядит следующим образом. Когда мы получим это из файла, text
=
/------------------------------------\
|u|s|e|r|n|a|m|e|,|p|a|s|s|w|o|r|d|\0|
\------------------------------------/
Первая строка цикла while изменяет его так, что text
=
/-------------------------------------\
|u|s|e|r|n|a|m|e|\0|p|a|s|s|w|o|r|d|\0|
\1------------------------------------/
Где var1
указывает на букву выше 1, таким образом var1 = username
. Обратите внимание, что это означает, что если вы запустите printf на text
, вы также получите имя пользователя. После второй строки text
=
/-------------------------------------\
|u|s|e|r|n|a|m|e|\0|p|a|s|s|w|o|r|d|\0|
\1------------------2-----------------/
А теперь var1
указывает на строку «имя пользователя», а var2
указывает на строку «пароль». Если вы напечатаетеf text
, вы все равно получите «username».
Обратите внимание, что если вы хотите получить больше двух переменных, вам нужно иметь предохранитель, обеспечивающий, чтобы strtok не возвращал NULL
, прежде чем пытаться использовать строку.
Также обратите внимание, что если вы измените text
, вы также испортите var1
и var2
. Я бы предложил использовать strcpy
для другой строки, если вы хотите хранить информацию более постоянным образом.