C 如何制作适合stdin字符串的数组?
我正在尝试使用“gethostbyname”。如果我将主机名直接硬编码到函数调用中,效果会很好。但是,我正在尝试将用户输入传递到此函数中。我相信我的问题可能是因为我传递给函数的数组有很多尾随空格C 如何制作适合stdin字符串的数组?,c,arrays,newline,fgets,C,Arrays,Newline,Fgets,我正在尝试使用“gethostbyname”。如果我将主机名直接硬编码到函数调用中,效果会很好。但是,我正在尝试将用户输入传递到此函数中。我相信我的问题可能是因为我传递给函数的数组有很多尾随空格 void connectHost(char *hostname) { int n; //This works //n = gethostbyname("irc.ubuntu.com"); //This always returns NULL n
void connectHost(char *hostname)
{
int n;
//This works
//n = gethostbyname("irc.ubuntu.com");
//This always returns NULL
n = gethostbyname(hostname);
if(n == NULL)
{
printf("Host Not Found.");
}
}
int main()
{
char hostname[256];
fgets(hostname,255,stdin);
connectHost(hostname);
}
那么,将主机名传递给函数的最佳方式是什么呢?我不应该使用FGET吗
谢谢 无论何时使用
fgets()
输入,请记住排除“\n”:
fgets(hostname,255,stdin);
hostname[strlen(hostname)-1] = 0;
当您输入
irc.ubuntu.com
作为输入时,它将以irc.ubuntu.com\n
的形式存储在hostname
中。您需要删除字符串末尾的\n
,方法是用nul字符覆盖它,如下所示:
fgets(hostname,256,stdin);
hostname[strlen(hostname)-1] = 0;
请注意,的第二个参数是要读取的最大字符数(包括最后一个空字符),因此在本例中,您可以传递它
256
而不是255
请注意,fgets
并不总是包含尾随换行符(例如,如果行被截断或文件中的最后一行不是以一行结尾)@jamesdlin:谢谢。我实际上提供了一个简单的答案,应该符合OP的需要。OP正在从stdin
获取输入,并且有换行符问题。使用stdin
很可能会有最后的换行符,但这并不能保证它(您可以按shell的EOF组合键)。