gpt4 book ai didi

c - 在C中提取两个分号之间的数据

转载 作者:行者123 更新时间:2023-12-03 00:06:59 26 4
gpt4 key购买 nike

我正在尝试编写实用类型的函数,但又不会太复杂而无法从分号分隔的字符串中提取值。在此示例中,我尝试提取 X=bc ,但在为 *cpp

赋值时收到的却是段错误

我可能做错了什么?

int main()
{
char x[500]="a;X=bc;def;ghi";
char* cp=x,*cpp;

while ((cp=strstr(cp,";")))
{
cp++;

if ((*cp)=='X' && (*cp+1)=='=')
{
cp+=2;
break;
}
}

if ((cpp=strstr(cp,";")))
{
*cpp='\0';
}

printf("'%s' '%s'\n",x,cp);
return 0;
}

最佳答案

这一行是错误的:

    if ((*cp)=='X' && (*cp+1)=='=')

应该是:

    if ((*cp)=='X' && *(cp+1)=='=')

或者更好:

    if (cp[0]=='X' && cp[1]=='=')

请注意,编写的代码非常脆弱 - 有很多方式可能会失败 - 尝试养成防御性编程的习惯 - 始终假设任何可能失败的事情都会失败,并且相应地编写代码,这样当事情没有按预期工作时,它至少会优雅地失败

另一个提示,当我在这里时:学习一些基本的调试技术 - 我无法立即看出代码出了什么问题,所以我在代码中添加了一些 printf,以便我可以获得有关正在发生的情况的更多信息on - 很快就发现,在第一个循环之后,cpNULL,从那里更容易看到问题。或者,我也可以在调试器中单步执行代码 - 任何一种技术都会在一两分钟内直接带您发现这个错误。

关于c - 在C中提取两个分号之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33246876/

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