2013-07-04 50 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'修饰符 –