我對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'之間的錯誤檢查,並且爲了清楚起見而刪除它?否則,您可能會通過空指針進行寫入。 –