c - 尝试在 for 循环中访问指针时出现分段错误



我正在尝试编写一个命令行计算器,并且在我编写的函数中遇到了一个问题,该函数将字符串拆分为几个较小的数字和运算符字符串。

这是函数(main 仅用于测试它(。

#include<string.h>
#include<stdio.h>
#define MAXNUMLEN 100
void splitter(char *str, char splitted[][MAXNUMLEN]) {
    int next_op = 0;
    int last_op = 0;
    int next_free = 0;
    while(strlen(str) - last_op > 1) {
        for(next_op; 
               *(str+next_op) != '+' 
            && *(str+next_op) != '-' 
            && *(str+next_op) != '*' 
            && *(str+next_op) != '/';
            ++next_op)
            ;
        for(int i = last_op; i < next_op; ++i)
            splitted[next_free][i] = *(str+i);
        splitted[next_free][next_op] = '';
        ++next_free;
        last_op = next_op;
        ++next_op;
    }
}
int main() {
    char temp[] = "1+1";
    char c[4][MAXNUMLEN];
    splitter(temp, c);
    printf(c[0]);
    printf(c[1]);
    printf(c[2]);
    printf(c[3]);
}

我在线路中遇到分段错误

splitted[next_free][i] = *(str+i);

但是,*(str+i( 应始终可访问,因为 i 永远不会大于字符串的长度。

当 str 不以运算符结尾时,next_op-for 永远不会结束。所以 i 循环进入无穷大并越过 str 的尽头。

        ;

相关内容

  • 没有找到相关文章

最新更新