root:x:0:0:root:/root:
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spool/lpd:
operator:x:11:0:operator:/root:
работа со строками, обьединение строк
ситуация такая: есть файл в нем содержатся строки типа
Код:
Нужно загнать в динамический список имена тоесть в одной root в другой bin в следующей daemon
Решил сделать так. считывать посимвольно каждую букву(до тех пор пока не встретится ":"(1)) и обьединять с предыдущей
получилось что-то вроде
Код:
char ch, ch_temp;
FILE *fp;
if ((fp = fopen("passwd", "r")) == NULL) {
printf ("can not open file");
};
ch = getc(fp); // get first simbol
while (ch!=':') {
ch_temp = getc(fp);//get too simbol
strcat(ch, ch_temp);
}
FILE *fp;
if ((fp = fopen("passwd", "r")) == NULL) {
printf ("can not open file");
};
ch = getc(fp); // get first simbol
while (ch!=':') {
ch_temp = getc(fp);//get too simbol
strcat(ch, ch_temp);
}
Дело в том что strcat не обьединет, выдает что-то вроде 'strcat' : cannot convert parameter 1 from 'char' to 'char *'
От этого куска требуется просто получить переменную ch (типа char) в котором только имя
Буду признателен если кто поможет
[COLOR=red]пожалуйста, пользуйтесь тэгами форматирования[/COLOR]
это обязательно реализовать на С? если это студенческая задача, оно конечно... а вообще тут простейший скрипт на perl либо bash подойдет.
Да совсем забыл. обязательное условие чтобы скомилировалось на gcc
Код:
#include <stdio.h>
int main()
{
FILE *fp;
char *line;
char *list[255];
line = (char*) malloc(255);
fp = fopen("/etc/passwd","r");
int i=0;
do
{
line = fgets(line, 255, fp);
strtok(line,":");
list= (char*) malloc(255);
if (line && (strncmp(line,"#",1))) strcpy(list[i++],line);
}
while (line);
fclose(fp);
}
int main()
{
FILE *fp;
char *line;
char *list[255];
line = (char*) malloc(255);
fp = fopen("/etc/passwd","r");
int i=0;
do
{
line = fgets(line, 255, fp);
strtok(line,":");
list= (char*) malloc(255);
if (line && (strncmp(line,"#",1))) strcpy(list[i++],line);
}
while (line);
fclose(fp);
}
Большое тебе спасибо!!! Разобрался.