【问题标题】:Segmentation fault when running program [closed]运行程序时出现分段错误[关闭]
【发布时间】:2019-03-27 05:58:43
【问题描述】:

当我运行此代码时,我收到一个错误segmentation fault (core dumped)。我看到错误在于“ printf("%c", first(s));",似乎将字符/字符串传递给函数不是正确的方法?如果不是,那我的代码有什么问题?

#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;
}

【问题讨论】:

  • 措辞错误。 core 转储很可能不是来自您的编译器,而是在运行通过编译源代码生成的可执行文件时。该错误在您的程序中,而不是在编译器中。阅读how to debug small programs
  • 您的字符指针未正确声明。将char s="blazqnqbla"; 更改为char *s="blazqnqbla";
  • 'while (str!= '\0')' 也是有问题的。您无法将 char* 与 char 进行比较
  • 尝试编译时出现警告-Wall -Wextra -pedantic

标签: c string function pointers char


【解决方案1】:

不确定您要在这里做什么,因此无法帮助算法。

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

  1. 定义字符指针为

    char *s="blazqnqbla";  // you had defined it as char s="..."
    
  2. 将while循环条件从while (str!= '\0')改为

    while (str[L]!= '\0')
    

通过这些更改,程序可以正常退出。函数first 仍然存在一些算法问题。它没有给出任何有意义的输出。

【讨论】:

  • 是的,我看到它给出了一个空白输出,如何解决这个问题?
  • 你需要解释你想用这个程序做什么。预期的输出是什么?
【解决方案2】:

我不知道你打算用这段代码实现什么,但这有很多错误。

专门针对您的 segmentation fault 错误,您必须更改 "s" 的初始化,例如 char *s="blazqnqbla";char s[]="blazqnqbla"; 由于s 是存储字符数组。

您的代码也有无限的while 循环 请修改为while (str[L] != '\0')

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 2013-11-30
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2021-12-16
    相关资源
    最近更新 更多