Вычтите из массива char количество символов - PullRequest
1 голос
/ 27 января 2012

Я не могу понять это.Я использую код .c, который открывает файл и читает каждую строку.Я хотел бы сохранить в char * substr 4 символа из строки 9 внутри txt-файла.Строка 5 содержит имя = Me She;Я хотел бы иметь в char * substr только Meli.Need помочь.THX Вот код c:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  FILE *fp;
  char str[128];
char str1[128];

  if((fp = fopen("/home/folder/file.txt", "r"))==NULL) {
    printf("Cannot open file.\n");
    exit(1);
  }

int lin=0;
  while(!feof(fp)) {
    if(fgets(str, 126, fp)) 
        printf("%s", str);
        if (lin==8)
        {
            char *c= (char *) malloc(sizeof(char)*strlen(str)+1);

            c= strndup(str, strlen(str)-5);?? not working?!!!
            printf("d is:",c);
        }

        lin=lin+1;
  }

  fclose(fp);

  return 0;
}

Ответы [ 2 ]

1 голос
/ 27 января 2012

Ваш printf неверен. измените его на printf("d is %s\n",c);.

Кстати, strdup выделяет необходимую память, поэтому вам не нужно выделять ее самостоятельно (На самом деле, у вас утечка памяти).

0 голосов
/ 27 января 2012

Вы звоните malloc(), а затем напрямую перезаписываете свой результат вызовом strndup(), это приводит к утечке памяти.

Кроме того, логика в вызове strndup() выглядит неправильно. Если вы хотите пропустить первые 5 символов, у вас должно быть str + 5.

Если у вас есть strdup(), используйте:

    if (lin==9)
    {
       char *name = strdup(str + 5);
       printf("name is: '%s'\n", name != NULL ? name : "(failed)");
    }

Тогда вы, вероятно, должны break выйти из цикла. Также обратите внимание, что указатель name выходит из области видимости, поэтому он не доступен, например, для кодирования вне цикла.

...