分段错误(c),不知道出了什么问题?



我一直收到分段错误错误,但我似乎找不到问题所在。

这方面的一个例子是:

输入: 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) {

相关内容

  • 没有找到相关文章

最新更新