- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
int parse_path(const char *path,char ***names,int *size)
{
int ch=0; ch='/';
*size=0;
char *q; q=path+1;
char *s=0;
while(1)
{
s=strchr(q,ch);
if(s!=NULL)
{
(*size)++;
if(*size==1)
{
(*names)=malloc(sizeof(char*)*(*size));
if(!(*names)) return -1;
}
else
{
(*names)=realloc(*names,(*size)*sizeof(char*));
if(!(*names)) return -1;
}
*(*names+(*size)-1)=malloc((s-q+1)*sizeof(char));
if(!(*(*names+(*size)-1))) return -1;
memset(*(*names+(*size)-1),0,(s-q+1)*sizeof(char));
strncpy(*(*names+(*size)-1),q,s-q);
q=s+1;
}
else
{
if(*q!='\0')
{
ch='\0';
s=strchr(q,ch);
(*size)++;
(*names)=realloc(*names,(*size)*sizeof(char*));
if(!(*names)) return -1;
*(*names+(*size)-1)=malloc((s-q+1)*sizeof(char));
if(!(*(*names+(*size)-1))) return -1;
memset(*(*names+(*size)-1),0,(s-q+1)*sizeof(char));
strncpy(*(*names+(*size)-1),q,s-q);
}
break;
}
}
return 0;
}
guest 24.12.2009 00:03 # 0
guest 24.12.2009 00:06 # +1
P.S. Наличие realloc в цикле + установка терминатора строки с помощью memset уже кое о чем говорит
guest 24.12.2009 00:07 # 0
nolka4 24.12.2009 06:53 # 0
я не знаю си, но я думал, что 2 звездочки там максимум может быть. Это что получается, что names - это указатель указателя на указатель?
guest 24.12.2009 11:33 # 0
TarasB 24.12.2009 20:18 # +1
guest 25.12.2009 09:32 # 0
guest 26.12.2009 09:40 # +1
nil 07.02.2010 11:06 # 0
guest 26.01.2010 22:08 # 0
4cppMan 24.12.2009 12:59 # 0
explosion_head 28.12.2009 15:22 # 0
Barmaglot 29.12.2009 13:32 # +1
guest 30.12.2009 21:42 # +1
KoirN 01.01.2010 23:15 # 0
KoirN 01.01.2010 23:14 # 0
Код из лаь\бораторной работы.
guest 02.01.2010 14:27 # +1
guest 03.01.2010 17:04 # +1