运行此代码时,出现错误 segmentation fault (core dumped)
。我看到错误在于“ printf(“%c”,first(s));”,看来这不是将char / string传递给函数的正确方法吗?如果没有,那么我的代码有什么问题?
#include <stdio.h>
char first(char *str);
char first(char *str){
int L=0;
int a[127]={0};
for (int i=0; i<127; i++){
a[i]=i+1;
}
while (str != '\0'){
for(int d=1; d<127; d++){
if(str[L]==(char)d){
if (a[L]>0){
a[L]=0;
L++;
break;
}
else if(a[L]==0){
a[L]=-1;
L++;
break;
}
else{
L++;
break;
}
}
}
}
for(int i=0; i>127; i++){
if(a[i]==0)
return (char)(i+1);
}
return '\0';
}
int main()
{
char s="blazqnqbla";
printf("%c", first(s));
return 0;
}
答案 0 :(得分:2)
不确定您要在此处执行的操作,因此无法帮助您解决算法。
要解决核心转储问题,您需要做两件事。
将字符指针定义为
char *s="blazqnqbla"; // you had defined it as char s="..."
将while循环条件从while (str!= '\0')
更改为
while (str[L]!= '\0')
使用这些更改,程序将正确退出。函数first
仍然存在一些算法问题。它没有提供任何有意义的输出。
答案 1 :(得分:1)
我不知道您打算用这段代码实现什么,但这有很多错误。
仅因您的segmentation fault
错误,您将不得不更改"s"
的初始化,例如
char *s="blazqnqbla";
或char s[]="blazqnqbla";
由于s
正在存储字符数组。
您的代码也有无限的while
循环
请像while (str[L] != '\0')