我一直收到分段错误错误,但我似乎找不到问题所在。
这方面的一个例子是:
输入: 4 桶
输出:2 阿巴布
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int a, len, i = 0, count = 0;
scanf("%d", &a);
len = a;
char *strn = malloc((len * sizeof(char*)) + 1);
scanf("%s", strn);
while (i != len) {
if (strn[i]=='a' && strn[i+1]=='a') {
strn[i] = 'b';
count++;
i++;
} else if (strn[i]=='b' && strn[i+1]=='b') {
strn[i] = 'a';
count++;
i++;
} else {
i+=2;
}
}
printf("%dn%sn", count, strn);
free(strn);
return 0;
}
对于初学者来说,这个内存分配
char *strn = malloc((len * sizeof(char*)) + 1);
^^^^^^
是不正确的。
看来你的意思是
char *strn = malloc((len * sizeof(char)) + 1);
循环中的条件
while (i != len) {
可以调用未定义的行为,因为变量的值i
可以绕过等于变量中的值的值len
由于 else 语句
} else {
i+=2;
}
并使用表达式i + 1
作为索引,因为例如当i
等于3
时,strn[i + 1]
等于终止零' '
,并且将执行 else 语句,这将使i
增加2
.
你可以重写 while 语句,例如
while (i + 1 < len) {