【问题标题】:C array print segmentation fault? [closed]C数组打印分段错误? [关闭]
【发布时间】:2013-07-04 18:43:03
【问题描述】:

为什么会出现分段错误?你能给我一些理解的解释吗?提前致谢。

#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;
}

【问题讨论】:

  • 这段代码有很多错误......我什至不知道从哪里开始。
  • 您正在尝试修改一个只读常量,但在您使用调试器并查看问题所在之前谁能知道。

标签: c pointers printf


【解决方案1】:

您没有为ips[i] 分配内存,sprintf 不会为您分配内存。在第一个 for 循环中添加一行,在 sprintf 之前:

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

编辑:正如 huseyin tugrul buyukisik 所说,port 不足以容纳 4 个字符一个空终止符。你应该使用%s 修饰符,因为port 也是一个字符串。

【讨论】:

  • 另外,port[4] 有 4 个字符,但没有空格让 null 结束它。
  • 很好发现,正在编辑。
  • %d 端口的修饰符 lol
  • :需要D char to int 转换器。
  • 1000 个悬空指针和 10 个被分配给未定义的行为。 :D :D >:c
猜你喜欢
  • 2019-08-03
  • 2012-11-13
  • 2012-09-09
  • 1970-01-01
  • 2013-11-10
  • 2018-05-27
  • 2018-10-17
  • 2015-12-28
  • 2021-02-16
相关资源
最近更新 更多