读取c中的文件后,我的打印函数中出现Seg故障
当我在main中调用print函数时,我的print函数中有一个未知的segfault,我看不出明显的修复方法是什么。我在整个程序中都使用了printf,但它不打印“here4”,这让我觉得这是由于我的print函数,或者当我在main中调用它时 我想将字典文件读入字符串数组 以下是代码片段: 如果您有任何想法,我们将不胜感激,谢谢读取c中的文件后,我的打印函数中出现Seg故障,c,segmentation-fault,C,Segmentation Fault,当我在main中调用print函数时,我的print函数中有一个未知的segfault,我看不出明显的修复方法是什么。我在整个程序中都使用了printf,但它不打印“here4”,这让我觉得这是由于我的print函数,或者当我在main中调用它时 我想将字典文件读入字符串数组 以下是代码片段: 如果您有任何想法,我们将不胜感激,谢谢 #define PRIME 1009 void fileRead(int argc, char **argv) void printTable(int a
#define PRIME 1009
void fileRead(int argc, char **argv)
void printTable(int arrayLength, char **table);
int main(int argc, char **argv)
{
char **table;
FILE *fp;
int i, arrayLength = PRIME;
/* Initial memory allocation */
table = (char**)malloc(PRIME*sizeof(char));
fileRead(argc, argv);
printf("here3\n");
for(i = 0; i < arrayLength; i++) {
printTable(arrayLength,table);
}
printf("here4\n");
return 0;
}
void fileRead(int argc, char **argv)
{
FILE *fp;
char *word;
int arrayLength = PRIME;
word = calloc(MAXCHAR, sizeof(char));
fp = fopen (argv[1], "r");
printf("here1\n");
/*read in grid and move along a cell each time */
while (fscanf(fp, "%s", word)!= EOF) {
if (argc != (2)) {
fprintf(stderr, "Cannot open file, %s\n Try again e.g. %s dictionary.txt\n" , argv[1], argv[0]);
}
if(fp == NULL) {
fprintf(stderr, "Cannot open file, %s\n Try again e.g. %s dictionary.txt\n" , argv[1], argv[0]);
return;
}
if (fp == NULL) {
fprintf(stderr, "Error opening file, try file name dictionary.txt\n");
exit(EXIT_FAILURE);
}
}
printf("here2\n");
fclose(fp);
return;
}
void printTable(int arrayLength, char **table)
{
int i;
for(i = 0; i < arrayLength; i++) {
printf("%s\n", table[i]);
}
printf("\n");
}
#定义素数1009
无效文件读取(整型argc,字符**argv)
无效打印表(整数排列长度,字符**表);
int main(int argc,字符**argv)
{
字符**表;
文件*fp;
int i,排列长度=素数;
/*初始内存分配*/
表=(char**)malloc(PRIME*sizeof(char));
文件读取(argc、argv);
printf(“此处3\n”);
对于(i=0;i
让我总结一下您的代码:
- 为
表
- 调用函数
:fileRead()
- 为
word
- 读文件
- 对读取的数据不执行任何操作
没有任何用处:它不返回任何内容,不接触fileRead()
,易受表
缓冲区溢出的影响,并留下word
的内存泄漏word
- 为
- 然后您将
表的未更改和未初始化的内容printf
- 为
表
- 调用函数
:fileRead()
- 为
word
- 读文件
- 对读取的数据不执行任何操作
没有任何用处:它不返回任何内容,不接触fileRead()
,易受表
缓冲区溢出的影响,并留下word
的内存泄漏word
- 为
- 然后您将
表的未更改和未初始化的内容printf
- 让我总结一下您的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PRIME 1009
#define MAXCHAR 256
char **fileRead(FILE *fp, int *len);
void printTable(int arrayLength, char **table);
int main(int argc, char **argv){
if (argc != 2) {
fprintf(stderr, "Need dictionary file argument.\nTry again e.g. %s dictionary.txt\n" , argv[0]);
exit(EXIT_FAILURE);
}
FILE *fp = fopen (argv[1], "r");
if(fp == NULL) {
fprintf(stderr, "Cannot open file, %s\nTry again e.g. %s dictionary.txt\n" , argv[1], argv[0]);
exit(EXIT_FAILURE);
}
int arrayLength = PRIME;
char **table = fileRead(fp, &arrayLength);//fclose(fp) inside this
printTable(arrayLength, table);
for(int i = 0; i < arrayLength; ++i)
free(table[i]);
free(table);
return 0;
}
char **fileRead(FILE *fp, int *len){
char *word = calloc(MAXCHAR, sizeof(char));
char **table = malloc(*len * sizeof(char*));
int i = 0;
while (i < *len && fscanf(fp, "%s", word) != EOF){
table[i] = malloc(strlen(word)+1);
strcpy(table[i++], word);
}
fclose(fp);
*len = i;
free(word);
return table;
}
void printTable(int arrayLength, char **table){
int i;
for(i = 0; i < arrayLength; i++) {
printf("%s\n", table[i]);
}
printf("\n");
}
#包括
#包括
#包括
#定义素数1009
#定义MAXCHAR 256
字符**fileRead(文件*fp,int*len);
无效打印表(整数排列长度,字符**表);
int main(int argc,字符**argv){
如果(argc!=2){
fprintf(stderr,“需要字典文件参数。\n请重试,例如%s dictionary.txt\n”,argv[0]);
退出(退出失败);
}
文件*fp=fopen(argv[1],“r”);
如果(fp==NULL){
fprintf(stderr,“无法打开文件,%s\n请再次尝试,例如%s dictionary.txt\n”,argv[1],argv[0]);
退出(退出失败);
}
int arrayLength=素数;
char**table=fileRead(fp,&arraylelength);//fclose(fp)在此文件中
打印表格(排列长度,表格);
对于(int i=0;i
试试这个
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PRIME 1009
#define MAXCHAR 256
char **fileRead(FILE *fp, int *len);
void printTable(int arrayLength, char **table);
int main(int argc, char **argv){
if (argc != 2) {
fprintf(stderr, "Need dictionary file argument.\nTry again e.g. %s dictionary.txt\n" , argv[0]);
exit(EXIT_FAILURE);
}
FILE *fp = fopen (argv[1], "r");
if(fp == NULL) {
fprintf(stderr, "Cannot open file, %s\nTry again e.g. %s dictionary.txt\n" , argv[1], argv[0]);
exit(EXIT_FAILURE);
}
int arrayLength = PRIME;
char **table = fileRead(fp, &arrayLength);//fclose(fp) inside this
printTable(arrayLength, table);
for(int i = 0; i < arrayLength; ++i)
free(table[i]);
free(table);
return 0;
}
char **fileRead(FILE *fp, int *len){
char *word = calloc(MAXCHAR, sizeof(char));
char **table = malloc(*len * sizeof(char*));
int i = 0;
while (i < *len && fscanf(fp, "%s", word) != EOF){
table[i] = malloc(strlen(word)+1);
strcpy(table[i++], word);
}
fclose(fp);
*len = i;
free(word);
return table;
}
void printTable(int arrayLength, char **table){
int i;
for(i = 0; i < arrayLength; i++) {
printf("%s\n", table[i]);
}
printf("\n");
}
#包括
#包括
#包括
#定义素数1009
#定义MAXCHAR 256
字符**fileRead(文件*fp,int*len);
无效打印表(整数排列长度,字符**表);
int main(int argc,字符**argv){
如果(argc!=2){
fprintf(stderr,“需要字典文件参数。\n请重试,例如%s dictionary.txt\n”,argv[0]);
退出(退出失败);
}
文件*fp=fopen(argv[1],“r”);
如果(fp==NULL){
fprintf(stderr,“无法打开文件,%s\n请再次尝试,例如%s dictionary.txt\n”,argv[1],argv[0]);
退出(退出失败);
}
int arrayLength=素数;
char**table=fileRead(fp,&arraylelength);//fclose(fp)在此文件中
打印表格(排列长度,表格);
对于(int i=0;i1)table=(char**)malloc(PRIME*sizeof(char))代码>-->table=(char**)malloc(PRIME*sizeof(char*)代码>2)表[i]
不存在