2012-01-27 8 views
1

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

#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; 
} 
+1

Если его девятая строка в нужном файле, то измените 'if (lin == 9)' на 'if (lin == 8)' как 'lin' инициализируется на' 0'. – hmjd

+0

yes.thx для уведомления –

+1

Пожалуйста, позаботьтесь о своих вопросах, с меньшим количеством опечаток и более полными словами. –

ответ

1

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

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

+0

please hellp :) Можете ли вы исправить мой пост? Я не знаю, как это решить. thx –

+0

Просто измените 'printf', как я уже сказал, и удалим строку' malloc'. – asaelr

+0

Как извлечь только 4 символа из позиции 3, например? –

0

Вы вызываете 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 выходит за пределы области видимости, поэтому он не доступен для кода вне цикла, например.

+0

Он хочет пропустить «последние» 5 символов. – asaelr

+0

Я хочу отправить первые 4 персонажа и взять всего 4. Мой пример: name = Me Sheelila ... Я НЕ МОГУ взять только меня. После этого я также хочу скопировать имя в char * concat, используя strcpy (concat, name); –

+0

в моем случае он печатает количество символов, которые я хочу + всю строку. Почему? –

Смежные вопросы