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

标签 c pointers substring

我正在尝试编写实用类型的函数,但又不会太复杂而无法从分号分隔的字符串中提取值。在此示例中,我尝试提取 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/

相关文章:

c - 这段c代码有什么问题?

c++ - 无法将指针向上转换为指针参数

c++ - 在 C++ 中返回两个创建的数组

nsstring - NSMakeRange 崩溃的应用程序

algorithm - 按子字符串快速过滤字符串集合?

MYSQL:将两个字符之间的字符串转换为整数

c - 使用 C 读取文件并删除字符

c - 如何实现整数数组的二进制搜索?

c - Emacs 作为 C 编程 IDE 配置?

C++指针的合适对齐方式