我将域名存储在二维char数组中。
char domainNames[2][4096]= {"www.yahoo.com","java.sun.com"};我需要检查列表中是否存在存储在另一个数组( char data[4096];)中的给定域名,如果找到了域名,则将在char IP[2][4096]= {"87.248.122.122","192.9.162.55"};中找到的所有IP地址以"#“分隔在数组char msg[4096];中
我就是这样做的:
for (i=0; i< 2;i++)
{
if(strcmp(domainNames[i], data)==0)
{
strcat(msg, IP[i]);
strcat(msg, "#");
found = true;
}
}
if(!found)
strcpy(msg,"IP not found");
break;
}问题是,即使字符串确实存在,结果也总是"IP找不到“。
发布于 2014-02-26 18:59:24
由于输入中保留换行符有问题,所以只需对换行符进行简单检查,并在出现时删除它:
size_t ln = strlen(data) - 1;
if ((ln > 0) && (data[ln] == '\n'))
data[ln] = '\0';
for (i=0; i< 2;i++)
{
if(strcmp(domainNames[i], data)==0)
{
strcat(msg, IP[i]);
strcat(msg, "#");
found = true;
}因为您正在从外部源获取输入(data),因此在对其进行任何操作之前彻底验证这一点可能会对您有好处。创建一个新函数并将数据传递给它,验证您已经删除了换行符,确保没有空格字符,确保它以".com"或其他什么结尾.任何来自外部源的信息都应该在使用之前尽可能地进行验证,这不仅是为了帮助调试,而且也是为了避免攻击(不管是否有意的)。
此外,如果msg在此函数之前为空,则只需稍微优化一下(可能),就可以始终检查0长度,并以这种方式删除额外的found布尔值。
https://stackoverflow.com/questions/20813969
复制相似问题