gpt4 book ai didi

在 C 代码中调用两个函数会停止程序

转载 作者:行者123 更新时间:2023-11-30 21:20:45 25 4
gpt4 key购买 nike

我正在开发一个 MongoDB 解释器,在我的工作过程中,我编写了一些函数来从 char 数组中提取一些字符串。第一个函数获取两个分隔符之间的字符串。

char* getContent(char* doc,char firstsep,char secsep){
int whichsep = 0, i = 0 , j = 0;
char* d;
d = (char*) malloc(sizeof(char));

while(whichsep != 2){
if(whichsep == 1) {
d[j]=doc[i];
j++;
}
if(doc[i]==firstsep) whichsep = 1;
if(doc[i]==secsep) whichsep = 2;
i++;
}
d[j-1]='\0';
return d;
};

第二个函数检查字符串是否包含“_id”

    int containsID(char* doc){

int i=0,j=0,c=0;
int * colonpos = (int*)malloc(sizeof(int));
while(doc[i]!= '\0') {
if(doc[i]==':' ){
colonpos[j]=i;
j++;
}
i++;
}
colonpos[j] = 0;
char* id = (char*)malloc(sizeof(char));
int containsID = 0;
i=0;j=0;
while( colonpos[i] != 0 && containsID !=1 ){

j=colonpos[i]-1;
while(doc[j]!=','&& doc[j]!='{'){
id[c]=doc[j];
j--;
c++;
}
id[c]='\0';
id = flipArray(id);
if(strcmp(id,"_id")==0)
containsID = 1 ;
c=0;
i++;
}
return containsID ;

};

这是主要功能

int main()
{
char* doc = "db.__fdlkdf.insert({p:231,g:{a:21},tomato:[21,25]})";
if(containsID(doc)==0) puts("no id ");
else puts("has id");

char* e1 = (char*)malloc(100*sizeof(char));
strcpy(e1,getContent(doc,'(',')'));
printf("%s\n",e1);


return 0 ;
}

当我运行该文件时,它会显示以下内容:

enter image description here

但是当我单独调用这些函数时,程序可以正常工作!

如果你们能帮助我,我将非常感激!

最佳答案

您的程序调用了未定义的行为。不要指望有什么好事。
在声明中

d[j]=doc[i];

对于i > 0,您正在越界访问数组。 d 是仅包含 1 个 char 的数组,与第二个函数中的 colonposid 类似。

关于在 C 代码中调用两个函数会停止程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35091649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com