C DNSlookup抛出分段错误

时间:2018-02-27 23:00:50

标签: c segmentation-fault

为什么这个DNS查找程序抛出"分段错误:11"?

我发现它与分配内存有关,但不知道发生了什么。

感谢。

images/

2 个答案:

答案 0 :(得分:2)

hostname未初始化,您没有为其分配任何空间,因此strcpy(hostname, inputVal);会调用未定义的行为。你可以通过动态分配空间来解决这个问题:

char *hostname = malloc(100);
if (hostname == NULL)
{
  // you can handle this error anyway you like, this is just an example
  fprintf(stderr, "Out of memory\n");
  exit(-1);
}
...
// after you're done using hostname, cleanup
free(hostname);

或者您可以像使用ipinputVal那样在自动存储中为其分配空间:

char hostname[100];

我更喜欢本例中的自动存储解决方案。事实上,我可能会完全摆脱inputVal而只是做

char hostname[100];
scanf("%99s", hostname);  // %99s ensures only 99 characters of data will be read from stdin,
                          // leaving room for the NUL terminator. Hostnames can get
                          // long, so you may want more than 100 characters.

然后从那里开始。

答案 1 :(得分:1)

您根本不需要inputVal数组,因为您只扫描一个字符串。请改用char hostname[100],而segfault应该会消失。