首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C strcmp中的字符串比较

问C strcmp中的字符串比较
EN

Stack Overflow用户
提问于 2013-12-28 11:24:39
回答 1查看 243关注 0票数 0

我将域名存储在二维char数组中。

代码语言:javascript
复制
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];中

我就是这样做的:

代码语言:javascript
复制
  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找不到“。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-26 18:59:24

由于输入中保留换行符有问题,所以只需对换行符进行简单检查,并在出现时删除它:

代码语言:javascript
复制
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布尔值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20813969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档