我正在用 C 语言做一个简单的数据库管理项目。但是当我运行这段代码时,我得到了错误。
Posted
技术标签:
【中文标题】我正在用 C 语言做一个简单的数据库管理项目。但是当我运行这段代码时,我得到了错误。【英文标题】:I am doing a simple database management project in C .but when i run this code i get error . 【发布时间】:2015-03-15 16:12:16 【问题描述】:我正在尝试将用户提供的文件名与字符串数组进行比较。当我运行此代码时,我得到错误: 在函数`add_record'中: ']' 标记前的语法错误
另外,即使我将代码从“开始”删除到“停止”,我也会收到错误消息:
i:\gw\lib\crt2.o(.text+0x8) 在函数_mingw_CRTStartup':
[Linker error] undefined reference to
__dyn_tls_init_callback'
[链接器错误] 未定义对 `__cpu_features_init' 的引用
i:\gw\lib\crt2.o(.text+0x8) ld 返回 1 个退出状态
请帮帮我。谢谢!
void add_record()
FILE *fp;
char filename[25],fname_check[NO_OF_FILE][25];
char tester;
int i;
printf("Type the name of the file you want to store the record in : ");
scanf("%s",filename);
//start
for(i=0;i<sizeof(fname_check);i++)
if(strcmp(fname_check[i][],filename) == 0) printf("File already exists!\n");
break;
printf("The file will be overwritten if you enter the same name.....\n");
printf("Type the name of the file you want to store the record in : ");
scanf("%s",filename);
//end
fp = fopen(filename,"w");
if(fp == NULL)
printf("Sorry,File cannot be opened!");
getch();
exit(0);
while(1)
fflush(stdin);
printf("\nEnter name : ");
gets(pro.name);
printf("Enter age : ");
scanf("%d",&pro.age);
printf("Enter gender : ");
gets(pro.gender);
printf("Enter phone : ");
scanf("%d",&pro.phone);
printf("Enter email : ");
gets(pro.email);
printf("Enter location : ");
gets(pro.location);
printf("Enter bio : ");
gets(pro.bio);
printf("If you want to add more records press any key... or press ESC key... ");
tester = getche();
if(tester == 27) break;
fclose(fp);
enter code here
【问题讨论】:
fname_check[i][]
无效,我认为
[Linker error] undefined reference to `__cpu_features_init' i:\gw\lib\crt2.o(.text+0x8) ld 返回 1 exit status - 你告诉运行时在哪里可以找到所有它需要共享 .so/.dll 资产吗?
无关,每次有人使用 gets()
,一只小猫就死了。它是如此邪恶,已从标准库中删除。使用fgets()
或getline()
。前者是标准的,后者是 gnu 和 POSIX.1-2008 的一部分。祝你好运。
@WhozCraig 我已经评论了整个代码仍然没有运行......虽然其他程序运行良好
【参考方案1】:
fname_check[i][]
无效。您只需要fname_check[i]
这是一个字符串。
此外,您必须循环到i < sizeof(fname_check)\sizeof(fname_check[0])
,因为sizeof(fname_check)
将给出数组的总大小(以字节为单位)。
【讨论】:
我试过了,但是这个错误又来了 i:\gw\lib\crt2.o(.text+0x8) In function _mingw_CRTStartup': [Linker error] undefined reference to__dyn_tls_init_callback' [Linker error] undefined reference到 `__cpu_features_init' i:\gw\lib\crt2.o(.text+0x8) ld 返回 1 退出状态 那么你一定有链接器错误。可能是因为你没有告诉编译器在哪里可以找到它需要的 .so / .dll 文件。 @Kishor 您的编译器找不到库。你用的是什么编译器? 这有关系吗?其他程序运行良好.. MinGW @Kishor 为编译器配置库位置。也许this could help【参考方案2】:我找到了解决方案...我在驱动器中安装了另一个 mingw..我删除了一个,现在一切正常...
【讨论】:
以上是关于我正在用 C 语言做一个简单的数据库管理项目。但是当我运行这段代码时,我得到了错误。的主要内容,如果未能解决你的问题,请参考以下文章