2012-01-27 43 views
1

我似乎無法解決這個問題。我正在使用打開文件並讀取每行的.c代碼。我想保存在txt文件中第9行的char * substr 4個字符中。第5行包含 name = Me她;我想在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; 
} 
+1

如果它需要的文件中的第九行然後在lin被初始化爲0時將if(lin == 9)'改爲if(lin == 8)'。 – hmjd 2012-01-27 11:15:47

+0

yes.thx用於提醒 – 2012-01-27 11:21:14

+1

請注意您的問題,減少拼寫錯誤和拼寫更完整的單詞。 – 2012-01-27 11:35:15

回答

1

您的printf是錯誤的。將其更改爲printf("d is %s\n",c);

順便說一句,strdup分配需要的內存,所以你不必自己分配它。 (實際上,你有內存泄漏)。

+0

,請確保一行不會太長:)請問你能糾正我的文章嗎?我不知道如何解決這個問題。 thx – 2012-01-27 11:09:13

+0

只要像我說的那樣更改'printf',並刪除'malloc'行。 – asaelr 2012-01-27 11:13:39

+0

如何從位置3只提取4個字符? – 2012-01-27 11:21:57

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

他想跳過'last'5個字符。 – asaelr 2012-01-27 11:10:59

+0

我想發送前4個字符,只需4個。我的例子是:name = Me SHelila ...我只想帶走我。之後,我也想使用strcpy(concat,name)在char * concat中複製名稱; – 2012-01-27 11:11:32

+0

在我的情況下,它打印我想要的字符數+整行。爲什麼? – 2012-01-27 11:43:05