2011-11-08 6 views
0

私は初心者であり、ファイル操作に関するいくつかの例を試してみようとしています。 私のコードを使ってファイルに書き込むと、私が書いたことに続いていくつかの余分なテキストが得られます。FILE書き込み; SSH_AGENT_PID = 2547?

SSH_AGENT_PID=2547 

どういう意味ですか、これを避けるにはどうすればよいですか? ありがとうございます。ここで

は私のコードは、これは私が私のコマンドラインで見ることができるものである

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) 
{ 
     int i; 
     FILE *fp; 

     fp = fopen(argv[1], "w"); 
     for(i = 0; i < argc; i ++) 
     { 
       fprintf(fp, argv[i + 2]); 
       fprintf(fp, " "); 
     } 
     fclose(fp); 

     return 0; 
} 

ある

[[email protected] basicC]# cc file_create_write.c 
[[email protected] basicC]# ./a.out /root/kernel_programming/basicC/test_file.txt ajish alfred in focuz infotech 
[[email protected] basicC]# cat test_file.txt 
ajish alfred in focuz infotech SSH_AGENT_PID=2547 [[email protected] basicC]# 

答えて

0

argcは、プログラムに渡される引数の数が含まれています。 argv[argc]argv[argc+1]にアクセスすると、実際には境界外のメモリ位置にアクセスしています。

あなたは、いくつかのシステムが実際に3番目の引数は、環境変数を保持しているthree argument mainを持って

for(i = 2; i < argc; i++) 
{ 
    fprintf(fp, argv[i]); 

代わりの

for(i = 0; i < argc; i++) 
{ 
    fprintf(fp, argv[i + 2]); 
+0

現在は動作しています。私はあなたの意見を持っています。どうもありがとうございます。 – ajishalfred

2

を行うことができます。あなたはargv(Igor Oksが指摘しているように)の終わりを走り、環境変数リストに入っています。環境変数を見ると、SSH_AGENT_PIDの値が2547(またはその他の数)になるはずです。

あなたのループはより次のようになります。

for(i = 2; i < argc; i++) 
    fprintf(fp, "%s ", argv[i]); 

あなたはおよそargv[0]を気にしないと、あなたがいないiに2を追加argv[2]で開始したいので、あなたはすでにファイル名をargv[1]を使用しました。

fprintfコールを明示的なフォーマット文字列を使用するように変更しました。あなたがそうしなければ、argv[i]にあるものはフォーマット文字列として解釈され、argv[i]にパーセント記号が含まれていると奇妙なことが起きます。

さらに、ルートとしてログインしているときにCプログラミングを学習しているようです。それは悪い考えです。非常に悪い考えです。ルートとしてログインしている間に通常のタスクを実行するというさらに悪い考え。あなたは通常のユーザーとしてログインして、/devなどを誤って消去しないようにしてください。

+0

今すぐ動作します。私はあなたの意見を持っています。どうもありがとうございます。 – ajishalfred