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