我在 C 中有一个旧程序,它使用C 库中的bsearch()
函数strcmp()
。在旧的 gcc version4.4.7 中,它运行正常。但是在最新的 Ubuntu 18.04 和 gcc 版本 7.4.0 中,它给出了分段错误。代码如下:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <search.h>
#define MAX_CHR_IN_STR 50
#define MAX_CHR_IN_DEMO_STR 86
#define GENDER 4
#define NUMBER 4
#define PERSON 4
#define TOTAL_ENTRY 2
#define MEDIUM 50
struct mytam_gnpstr {
char mytam[MAX_CHR_IN_STR];
char mytam_lbl[MAX_CHR_IN_STR];
char gnp_str[MAX_CHR_IN_DEMO_STR];
char gen_pos[GENDER];
char num_pos[NUMBER];
char per_pos[PERSON];
};
struct mytam_gnpstr mytam_gnpstr_array[TOTAL_ENTRY] = {
"0", "0", "0[-,s,m]", "0", "s", "m",
"0_0_kara", "0_0_kara", "02[-,-,-]kara_0[-,-,-]", "0", "0", "0",
};
int main(void) {
char *rtamexample;
char TAM[MEDIUM] = "wA";
fprintf(stderr, "TAM :::::::: %s\n", TAM);
fprintf(stderr, "mytam_gnpstr_array[0].mytam :::::::: %s\n",
mytam_gnpstr_array[0].mytam);
fprintf(stderr, "TOTAL_ENTRY :::::::: %d\n", TOTAL_ENTRY);
fprintf(stderr, "sizeof(mytam_gnpstr_array[0]) :::::::: %zu\n",
sizeof(mytam_gnpstr_array[0]));
rtamexample = (char *)bsearch(TAM, mytam_gnpstr_array[0].mytam, TOTAL_ENTRY,
(sizeof(mytam_gnpstr_array[0])), strcmp);
fprintf(stderr, "bsearch :::::::: %s\n", rtamexample);
}
它在旧 gcc 版本 4.7.7 中给出bsearch()
输出"wA"
,但在 gcc7.4.0 中给出分段错误。任何解决此问题的帮助表示赞赏。