2013-07-04 76 views
-3

爲什麼我會收到分段錯誤?你能給我一些無法解釋的解釋嗎?提前致謝。C數組打印分段錯誤?

#include <stdio.h> 

int main() 
{ 
    int i,j; 

    char* ips[1000]; 
    char ip[15] = "192.34.132.52"; 
    char port[4] = "4003"; 

    for (i = 0; i < 10; i++) { 
     sprintf(ips[i], "%s:%d", ip, port); 
    } 

    for (j = 0; j < 10; j++) { 
     printf("[%d] = %s\n", j, ips[j]); 
    } 

    return 0; 
} 
+2

這段代碼有太多的錯誤......我甚至不知道從哪裏開始。 – Jashaszun

+0

您正試圖修改一個只讀常量,但是直到您使用調試器並查看問題出在哪裏之後才能知道。 – bmargulies

回答

2

你沒有分配的內存ips[i]sprintf不會爲你做。添加一行在第一for循環中,sprintf前:

ips[i] = malloc(sizeof(ip)+sizeof(port)+2); 

編輯:如玉山tugrul buyukisik指出,port是不是大到足以容納4個字符空終止符。而且您應該使用%s修飾符,因爲port也是一個字符串。

+0

另外,端口[4]有4個字符,但沒有空格用於標記結尾。 –

+0

好了,編輯。 – Kninnug

+0

端口lol的'%d'修飾符 –