C 莫尔斯字母分割错误

C 莫尔斯字母分割错误,c,C,我的代码没有将第二个节点添加到树中。当我添加第二个节点时,它会给我SIGSEGV错误。我认为这是关于strcmp函数的,但当我试图理解它在main func的最底层如何正常工作时,它会返回-1,所以我这样写。我的大多数变量命名为Turkish,下面是它们的翻译,让你更容易理解 dugum=节点,kok=根;索尔=左;下垂=右侧;安妮=母亲 // C program to demonstrate insert operation in binary search tree #include <

我的代码没有将第二个节点添加到树中。当我添加第二个节点时,它会给我SIGSEGV错误。我认为这是关于strcmp函数的,但当我试图理解它在main func的最底层如何正常工作时,它会返回-1,所以我这样写。我的大多数变量命名为Turkish,下面是它们的翻译,让你更容易理解 dugum=节点,kok=根;索尔=左;下垂=右侧;安妮=母亲

// C program to demonstrate insert operation in binary search tree
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct tree {
  char *harf;
  char *morskodu;
  struct tree *left;
  struct tree *right;
} agac;

agac *kok = NULL;

void ekle(char *harf, char *morskodu) {
  if (kok == NULL) {
    kok = (agac *)malloc(sizeof(agac));
    kok->harf = harf;
    kok->morskodu = morskodu;
    kok->left = NULL;
    kok->right= NULL;
  } else {
    agac *yeni = (agac *)malloc(sizeof(agac));
    yeni->harf = harf;
    yeni->morskodu = morskodu;
    yeni->left = NULL;
    yeni->right = NULL;
    agac *dugum = kok, *anne;
    while (dugum != NULL) {
      anne = dugum;
      if (harf <= dugum->harf)
        dugum = dugum->left;
      else
        dugum = dugum->right;
    }
    if (harf <= dugum->harf)
      anne->left = yeni;
    else
      anne->right = yeni;
  }
}

void dolas(agac *dugum) {
  if (dugum != NULL) {
    printf(" %s ", dugum->harf);
    dolas(dugum->left);
    dolas(dugum->right);
  }
}

void main() {
  ekle("a", "-");
  ekle("b", "-.");
  dolas(kok);

  int x = strcmp("A", "B");
  printf("%d", x);
}
//演示二进制搜索树中插入操作的C程序
#包括
#包括
#包括
类型定义结构树{
char*harf;
char*morskodu;
结构树*左;
结构树*右;
}阿加克;
agac*kok=NULL;
void ekle(char*harf,char*morskodu){
if(k==NULL){
kok=(agac*)malloc(sizeof(agac));
kok->harf=harf;
kok->morskodu=morskodu;
角->左=空;
kok->right=NULL;
}否则{
agac*yeni=(agac*)malloc(sizeof(agac));
yeni->harf=harf;
yeni->morskodu=morskodu;
yeni->left=NULL;
yeni->right=NULL;
阿加克*杜古姆=科克,*安妮;
while(dugum!=NULL){
安妮=杜古姆;
if(harf-harf)
dugum=dugum->左;
其他的
dugum=dugum->右;
}
if(harf-harf)
安妮->左=叶妮;
其他的
安妮->右=叶妮;
}
}
真空多拉(agac*dugum){
如果(dugum!=NULL){
printf(“%s”,dugum->harf);
多拉斯(杜古姆->左);
多拉斯(杜古姆->右);
}
}
void main(){
ekle(“a”,“-”);
ekle(“b”和“-”);
多拉斯(角);
int x=strcmp(“A”、“B”);
printf(“%d”,x);
}

您尝试取消对空指针的引用

while (dugum != NULL) {
  anne = dugum;
  if (harf <= dugum->harf)
    dugum = dugum->sol;
  else
    dugum = dugum->sag;
}
这会导致未定义的行为


还要注意,这种比较将指针与字符串文字进行比较,因此也是未定义的行为。要比较两个C字符串,应该使用strcmp

尝试取消对空指针的引用

while (dugum != NULL) {
  anne = dugum;
  if (harf <= dugum->harf)
    dugum = dugum->sol;
  else
    dugum = dugum->sag;
}
这会导致未定义的行为


还要注意,这种比较将指针与字符串文字进行比较,因此也是未定义的行为。要比较两个C字符串,您应该使用
strcmp

您正在访问程序不拥有的内存。如果你想知道更多,你必须发布代码!如果你做一个快速搜索和替换而不是提供翻译(并缩进代码),阅读起来会更容易。很抱歉,这是我的第一个条目,所以我无法获得如何共享代码,但我想现在我得到了一些有限的成功,有可能将C代码粘贴到Google translate中,并获得一些接近的内容[可能需要一些调整]。这看起来像是模糊的代码。更难找出错误…你正在访问程序不拥有的内存。如果你想知道更多,你必须发布代码!如果你快速搜索和替换而不是提供翻译(并缩进代码),阅读起来会更容易很抱歉,这是我的第一个条目,所以我无法了解如何共享代码,但我想现在我了解到了,虽然成功有限,但可以将C代码粘贴到Google translate中,并获得接近的内容[可能需要一些调整].true这看起来像是模糊的代码。更难找出错误…感谢您百万次:)感谢您百万次:)