4

したがって、pid を何らかの文字列に strcat する必要があります。私はこれを持っています

strcat (str,(char*)getpid());

しかし、これは機能しません。

- - 編集 - -

わかりました、私は反対票を理解しています。質問を投稿するのが早すぎました。pid が int を返すことに気づかず、int を char* にキャストできない

itoa は標準ではないため動作しません c.

これが私がやった方法です。

char pid[10];
snprintf(pid, 10,"%d",(int)getpid());
strcat (str, pid); 
4

2 に答える 2

8

を使用して文字列を作成する代わりに、strcatより柔軟な (そして効率的な!) sprintf/snprintf関数を使用することを検討してください。

char *end = str;
end += sprintf(end, "%s ", "hello!");
end += sprintf(end, "%ld", (long)getpid());
if(bar)
    end += sprintf(end, "%x", 0xf00d);

sprintf書かれた文字数を返すことを観察して、画家のシュレミエルのアルゴリズムに屈することなく文字列を作成できるようにします。固定サイズのバッファーをオーバーランしないようにしたい場合は、snprintfこれを行います (strcat盲目的に連結するだけであり、それを回避する標準的な方法はありません)。

pid_t標準pid_tでは、「 ... の [幅] が type の幅以下である 1 つ以上のプログラミング環境」が存在することが保証されていることに注意してくださいlong。したがって、そう言う限り、pid_tへのキャストは安全です。longgetconf

于 2013-03-07T03:06:52.083 に答える
1

%ldlong へのキャストと、sprintfの書式指定子の使用について言及している参考文献がいくつかあります。sprintf(str + strlen(str), "%ld", (long) getpid());

于 2013-03-07T03:10:53.777 に答える