为什么这个DNS查找程序抛出"分段错误:11"?
我发现它与分配内存有关,但不知道发生了什么。
感谢。
images/
答案 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);
或者您可以像使用ip
和inputVal
那样在自动存储中为其分配空间:
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应该会消失。