运行程序时出现分段错误

时间:2018-10-23 05:08:56

标签: c string function pointers char

运行此代码时,出现错误 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;
}

2 个答案:

答案 0 :(得分:2)

不确定您要在此处执行的操作,因此无法帮助您解决算法。

要解决核心转储问题,您需要做两件事。

  1. 将字符指针定义为

    char *s="blazqnqbla";  // you had defined it as char s="..."
    
  2. 将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')

那样修改