0

我正在努力读取文件并删除行中的一些字符,我可以以任何方式删除字符,但是 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(path); 不工作,但如果我像这样使用 strcpy(path,"/home/ubu/myDocs"); 我可以用,

所以我想我像这样打印字符

for (i=0, i < 200; i++) printf(path[i]);

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

ps 我发现在第一种情况下 chdir 返回值 < 0,这意味着路径是错误的,不,,但它包含路径和一些无用的东西

谢谢

4

1 回答 1

1

你能准确地添加你看到的输出printf()吗?

我最好的猜测是这fgets()只是包括额外的字符。当您执行 anfgets()并传入时sizeof line,它将读取最多 512 个字符,但将在换行符\n或 EOF(或可能其他字符,如回车符\r)之后停止。特别是,如果您的文件中有换行符,它将被复制到fgets(). 尝试删除文件路径末尾的任何多余字符。

编辑所以你有两个不同的问题。首先是为什么在打印path. 嗯……那是因为你打印了 200 个字符。您希望其他约 190 个字符是什么?我不知道为什么你在使用时看不到垃圾,strcpy()但你并没有真正展示你做了什么。第二个问题是@WhozCraig 指出的问题。您在该块line的末尾超出范围。if如果您chdir()在那之后调用路径,则path指向垃圾。

于 2012-11-04T09:17:10.527 回答