从char数组中减去许多字符

时间:2012-01-27 11:00:11

标签: c ubuntu file-io

我似乎无法解决这个问题。我正在使用.c代码打开文件并读取每一行。我想从txt文件中的第9行保存char * substr 4个字符。第5行包含 name = Me She;我想在char * substr中只有Meli.Need帮助。谢谢 这是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 个答案:

答案 0 :(得分:1)

你的printf错了。将其更改为printf("d is %s\n",c);

顺便说一句,strdup分配所需的内存,因此您不必自己分配。 (事实上​​,你有内存泄漏)。

答案 1 :(得分: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超出了范围,因此例如,它不能用于循环外的代码。