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"); 私はそれを使用することができます、

だから私はこのようにcharを印刷するという考えを得る

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

最初のケースでは、出力の ("/home/ubu/myDocs") の後に奇妙な文字が表示されましたが、2 番目のケースではそのようなものは取得されず、うまく機能しました。何をすべきか理解できません。インターネットで非常に多くの方法に従いましたが、同じことが起こりました。何が起こったのか説明し、解決策を教えてください

ps最初のケースでchdirの戻り値が<0であることがわかりました。つまり、パスが間違っていることを意味しますが、パスと何か役に立たないもので構成されています

ありがとう

4

1 に答える 1

1

から表示される出力を正確に追加できますprintf()か?

私の最善の推測は、fgets()余分な文字を含めることです。を実行しfgets()て渡すと、sizeof line最大 512 文字が読み取られますが、改行、\n、または EOF (またはキャリッジ リターンなどの他の文字\r) の後で停止します。特に、ファイルに改行がある場合、それはfgets(). ファイルのパスの末尾にある余分な文字を削除してみてください。

編集したがって、2つの別々の問題があります。まず、印刷時にゴミが表示される理由ですpath。それは、200 文字を印刷するためです。残りの約 190 人のキャラクターをどうしたいですか? 使用時にゴミが表示されない理由はわかりませんstrcpy()が、実際に何をしたかを正確に示していません。2番目の問題は、@WhozCraigが指摘したものです。あなたはそのブロックlineの最後で範囲外になります。その時点以降にパスifを呼び出すと、ガベージを指します。chdir()path

于 2012-11-04T09:17:10.527 に答える