读取文件并使用C删除字符

时间:2012-11-04 08:56:25

标签: c trim readfile

我正在努力阅读文件并删除行中的一些字符,我可以删除任何字符,但char *包含许多未知的东西。

这是在我的文件中。只是一行

localpath=/home/ubu/myDocs

在我的代码中

#include <stdio.h>
#include <strings.h>

char *path;

int main()
{ 
  static const char filename[] = "pathFile";
  FILE *file = fopen ( filename, "r" );

   if ( file != NULL )
   {
      char line[512];
      while ( fgets ( line, sizeof line, file ) != NULL ) // read a line 
      {
         fputs ( line, stdout ); // write the line 
         path = strchr(line,'=') +1 ;
      }
      fclose ( file );
   }
   else
   {
      perror ( filename ); // why didn't the file open? 
   }
}

但问题是我无法使用路径,例如chdir(路径);不管用, 但如果我使用这个strcpy(路径,&#34; / home / ubu / myDocs&#34;);我可以用它,

所以我想知道我打印这样的字符

for(i = 0,i&lt; 200; i ++) 的printf(路径[I]);

在第一种情况下,我在输出中得到了一些奇怪的字符(&#34; / home / ubu / myDocs&#34;),但在第二种情况下我没有得到那种东西而且它效果很好。我无法理解该做什么,我在互联网上遵循了很多方法,但同样的事情发生了,请解释我发生了什么并给我一些解决方案

P.S 我发现在第一种情况下,chdir返回值是&lt; 0,那意味着路径错了没有,,,但它包含路径和无用的东西

感谢

1 个答案:

答案 0 :(得分:1)

您可以准确添加您在printf()中看到的输出吗?

我最好的猜测是fgets()只包含额外的字符。当您执行fgets()并传入sizeof line时,它最多会读取512个字符,但会在换行符\n或EOF(或者其他字符,如回车符, \r)。特别是,如果您的文件中有换行符,则会在fgets()中复制该换行符。尝试删除文件路径末尾的任何多余字符。

修改所以你有两个不同的问题。首先是打印path时看到垃圾的原因。嗯......那是因为你打印了200个字符。你想要其他〜190个角色是什么?我不知道为什么你在使用strcpy()时看不到垃圾,但你还没有真正显示你做了什么。第二个问题是@WhozCraig指出的问题。 line块结束时,if超出了范围。如果您在该点之后在路径上调用chdir(),则path指向垃圾。