gpt4 book ai didi

c - C strcmp 中的字符串比较

转载 作者:行者123 更新时间:2023-11-30 17:42:07 25 4
gpt4 key购买 nike

我的域名存储在二维字符数组中

char domainNames[2][4096]= {"www.yahoo.com","java.sun.com"};

我需要检查列表中是否存在存储在另一个数组中的给定域名(char data[4096];),如果找到域名,则存储找到的所有IP地址在 char IP[2][4096]= {"87.248.122.122","192.9.162.55"}; 数组中用“#”分隔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 not found”。

最佳答案

由于您遇到输入中保留换行符的问题,因此您只需对换行符进行简单检查,然后将其删除(如果存在):

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;
}

因为您是从外部源获取输入(数据),所以在对其进行任何操作之前彻底验证这一点可能会对您很有帮助。创建一个新函数并向其传递数据,验证您是否已删除换行符,确保没有空格字符,确保它以 ".com" 或其他任何内容结尾...任何出现的内容来自外部来源的内容在使用之前应尽最大努力进行验证,不仅可以帮助调试,还可以避免攻击(有意或无意)。

此外,对您来说只是一个轻微的(可能的)优化,如果 msg 在此函数之前为空,您始终可以检查 0 长度并删除额外的 found bool 值就是这样。

关于c - C strcmp 中的字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20813969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com