私はC言語には新しく、学習を促す助けとしてプロジェクトを進めています。私はsh popenからの出力を得るのに苦労していました。彼らはstrcpyがこのような状況でどのように動作するのかわからない
strcpy(str + size - 1,buf);
を使用ところずっと、検索や裁判の時間後、私は非常に古いポストに出くわしこれは私が見つけることができるし、それが働いているこのの最初で唯一の例でした。 strの最後にある終了文字をbufの内容で上書きするようです。それは安全ですか?私はまだこのデータのすべてをどのように格納しているのかを把握しておらず、最後にその番号を+2以上に変更すると、セグメンテーションフォルトまたは無効な次のサイズが発生します。完全なコードは次のとおりです
int dns_probe(char * hostname)
{
char * digLoop[4] = {"ns ","a ","cname ","mx "};
int i;
char outage[1];
char *str = NULL;
char *temp = NULL;
unsigned int size = 1;
unsigned int strlength;
for (i = 0; i < 4; i++)
{
char *digcmd = concatCMD(digLoop[i],hostname);
FILE * dig = popen(digcmd,"r");
char bufer[256];
while(fgets(buf,sizeof(buf),dig) != 0){
strlength = strlen(buf);
temp = realloc(str, size + strlength);
str = temp;
strcpy(str + size - 1,buf);
size += strlength;
}
pclose(dig);
free(digcmd);
}
printf("%s",str);
}
実際には、私は自分自身を道路の下に問題を設定していないことを確認したいですか?
あなたは 'temp = realloc()'と 'str = temp'の間でエラーをチェックして、わかりやすくするためにそれを削除したと思いますか?それ以外の場合は、NULLポインタを使用して書き込むことができます。 –