gpt4 book ai didi

C 段错误(核心转储)

转载 作者:行者123 更新时间:2023-11-30 18:15:10 26 4
gpt4 key购买 nike

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int Search_in_File(char *fname,char *str){
FILE *fp;
int line_num = 1;
int find_result = 0;
char temp[512];
if((fp = fopen(fname, "r")) == NULL)
return(-1);

while(fgets(temp, 512, fp) != NULL){
if((strstr(temp, str)) != NULL){
printf("A match found on line: %d\n", line_num);
printf("\n%s\n", temp);
find_result++;
}
line_num++;
}
if(find_result == 0){
printf("\nSorry, couldn't find a match.\n");
}
if(fp)
fclose(fp);
return(0);
}
void main(){
char file_name[15];
char *fname;
*fname=file_name[15];
char *str;
char string_to_be_searched[15];
*str=string_to_be_searched[15];
int result, errno;
printf("Enter The File Name :");
scanf("%s",fname);
printf("Enter The String To Be Searched :");
scanf("%s",str);
result = Search_in_File(fname , str);
if(result==-1){
perror("Error");
printf("Error number = %d\n", errno);
exit(1);
}
}

我写了这个小程序来从文件中搜索字符串,但它在 gcc Linux 中显示段错误(核心转储)这个错误是为什么?我该如何修复它?

最佳答案

char *fname; 
*fname=file_name[15];

考虑一下该代码的作用。当你给*fname赋值时,fname指向哪 block 内存?

答案是:fname未初始化的指针,它可以指向内存中的任何随机位置。它很可能包含 0,因此尝试取消引用它会立即产生 SIGSEGV(但这并不能保证)。

您还应该学习使用调试器,它可以直接指出问题所在。

关于C 段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40075171/

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