C 断开文件时出现分段错误(核心转储)
我正试图编写一个程序,将一个包含公司名称和电话号码的文件拆分为名称、区号和电话号码。我的问题是,每当我尝试运行该程序时,就会出现错误分段错误(内核转储)。我试着在指针上使用malloc,但似乎不起作用C 断开文件时出现分段错误(核心转储),c,C,我正试图编写一个程序,将一个包含公司名称和电话号码的文件拆分为名称、区号和电话号码。我的问题是,每当我尝试运行该程序时,就会出现错误分段错误(内核转储)。我试着在指针上使用malloc,但似乎不起作用 # include <stdio.h> # include <stdlib.h> # include <string.h> typedef struct { char name[30]; char areacode[10]; char p
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
typedef struct {
char name[30];
char areacode[10];
char phone[14];
} phone_numbers;
int ReadNumber(phone_numbers *phone) {
FILE *input = fopen("phone_numbers.txt", "r");
char length[200];
char *temp;
int i;
if (input == NULL) {
printf("File can not open");
}
while (fgets(length, sizeof(length), input) != NULL) {
temp = strtok(length, " ");
strcpy(phone[i].name, temp);
temp = strtok(NULL, "-");
strcpy(phone[i].areacode, temp);
temp = strtok(NULL, "\n");
strcpy(phone[i].phone, temp);
i++;
}
fclose(input);
return i;
}
void PrintNumbers (phone_numbers *phone, int i) {
int j;
for(j=0; j <= i; j++) {
printf("Business: %s Area code: %s Phone: %s \n", phone[i].name, phone[i].areacode, phone[i].phone);
}
return;
}
int main() {
phone_numbers phone[10];
int i;
i = ReadNumber(phone);
PrintNumbers(phone, i);
return 0;
}
#包括
#包括
#包括
类型定义结构{
字符名[30];
字符区域码[10];
字符电话[14];
}电话号码;
int ReadNumber(电话号码*电话){
FILE*input=fopen(“phone_numbers.txt”、“r”);
字符长度[200];
字符*温度;
int i;
如果(输入==NULL){
printf(“文件无法打开”);
}
while(fgets(长度,sizeof(长度),输入)!=NULL){
温度=strtok(长度“”);
strcpy(电话[i]。姓名,临时工);
温度=strtok(空,“-”;
strcpy(电话[i]。区号,温度);
temp=strtok(空,“\n”);
strcpy(phone[i]。phone,temp);
i++;
}
fclose(输入);
返回i;
}
无效打印号码(电话号码*电话,int i){
int j;
对于(j=0;j错误的原因是您没有在ReadNumber()
函数中初始化i
另外,您应该始终检查strtok()
是否返回NULL
错误原因是您没有在ReadNumber()
函数中初始化i
另外,您应该始终检查strtok()
是否返回NULL
您可以先检查以确保strtok
没有返回空指针。如果在GCC或Clang中打开-Wall-Wextra
标志(或其他编译器中的类似警告标志),将提示您在ReadNumber
函数中初始化i
。您可以首先检查以确保strtok
没有返回空指针。如果您在GCC或Clang中打开-Wall-Wextra
标志(或其他编译器中的类似警告标志),系统将提示您在ReadNumber
函数中初始化i
。