我正在尝试编写一个命令行计算器,并且在我编写的函数中遇到了一个问题,该函数将字符串拆分为几个较小的数字和运算符字符串。
这是函数(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 的尽头。
;