2012-01-27 72 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