как сделать строковое слово мудрым (чтобы потом я мог их поменять) хранить в массиве ??в С - PullRequest
1 голос
/ 21 ноября 2010

мой код выглядит так !!

int i=0,j=0,k=0;
 char *a[20];
 int count=0;
 for(i=0;i<20;i++)
    {
       a[i] = malloc(50 * sizeof(char));
    }
   i=0; 
 while(*(p+i)!='\n')
 {
  int k=0; 
   while(*(p+i)!=' ')
     {
    *(a[j]+k)=*(p+i);
    i++;
    k++;
   }
   *(a[j]+k)='\0';
                 i++;
          j++;
 }
 printf("\n Count%d",j);
 count=j;
 for(j=0;j<count;j++)
 {
  printf("%s",a[j]);
    printf("\n \n ");
  }
}  

Ответы [ 2 ]

2 голосов
/ 21 ноября 2010

«Лучше», чем strtok & Co, см. Ниже:

int strsplit(const char *s,char ***l,char t)
{
  int r=0;
  while( strchr(s,t) )
  {
    *l=realloc(*l,++r*sizeof*l);
    memcpy((*l)[r-1]=calloc(1,strchr(s,t)-s+1),s,strchr(s,t)-s);
    s=strchr(s,t)+1;
  }
  *l=realloc(*l,++r*sizeof*l);
  memcpy((*l)[r-1]=calloc(1,strlen(s)+1),s,strlen(s));
  return r;
}

int main()
{
    char **l=0,*x="1;2;;4";
    int i,r=strsplit(x,&l,';');
    for(i=0;i<r;++i)
    {
      puts(l[i]);
      free(l[i]);
    }
    free(l);
    return 0;
}

лучше, потому что строка может быть const, она работает в многопоточности, пустые работы не игнорируются.

0 голосов
/ 21 ноября 2010

Вы не говорите, действительно ли ваш код работает.Есть проблема или вы просто спрашиваете комментарии к вашему коду?Ваш код потерпит неудачу, если любое слово будет длиннее 49 символов.

Вместо этого вы можете использовать библиотечную функцию strtok (), чтобы разбить строку на токены / слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...