Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 无法将字符串保存到指向数组的指针中_C_String_File_Pointers_Io - Fatal编程技术网

C 无法将字符串保存到指向数组的指针中

C 无法将字符串保存到指向数组的指针中,c,string,file,pointers,io,C,String,File,Pointers,Io,我试图将某些单词保存到指向数组(**valid_words)的指针中,但遇到了一个我不理解的问题。下面是我试图使用的函数,最终的结果是根据iline和dline相等的条件,使有效_字包含所有有效字 void CheckFile(char *input_file, char *dictionary_file, char *output_file, char **valid_words) { /* Open files as read or append */ FILE *input

我试图将某些单词保存到指向数组(**valid_words)的指针中,但遇到了一个我不理解的问题。下面是我试图使用的函数,最终的结果是根据iline和dline相等的条件,使有效_字包含所有有效字

void CheckFile(char *input_file, char *dictionary_file, char *output_file, char **valid_words)
{
    /* Open files as read or append */
    FILE *input, *dictionary, *output;
    input = fopen(input_file, "r");
    dictionary = fopen(dictionary_file, "r");
    output = fopen(output_file,"a");
    int word_count = 0;

    /* Read from files */
    if (input != NULL && dictionary!= NULL)
    {   
        char *iline = malloc(MAXSIZE*sizeof(char)); 
        char *dline = malloc(MAXSIZE*sizeof(char));

        while (fgets (iline, sizeof iline, input) != NULL)
        {   
            while (fgets (dline, sizeof dline, dictionary) != NULL)
            {   
                trimwhitespace(iline);
                trimwhitespace(dline);
                if (strcasecmp(iline, dline) == 0 ) 
                {   
                    fprintf(output, "%s\n",iline);
                    valid_words[word_count] = iline;
                    printf("Word Count: %d\n", word_count);
                    printf("At Zero: %s\n", valid_words[0]);
                    printf("Valid Word: %s\n", valid_words[word_count]);
                    printf("Actual Word: %s\n", iline);
                    word_count++;
                }   

            }   
            rewind(dictionary);
        }   

        fclose(input);
        fclose(dictionary);
        fclose(output);
        free(iline);
        free(dline);
    }   
    else
    {   
        printf("An error has occured\n");
    }   
}
我得到的电流输出是

Word Count: 0
At Zero: miles
Valid Word: miles
Actual Word: miles
Word Count: 1
At Zero: limes
Valid Word: limes
Actual Word: limes
Word Count: 2
At Zero: smile
Valid Word: smile
Actual Word: smile
Word Count: 3
At Zero: slime
Valid Word: slime
Actual Word: slime
我期望在零:总是输出“英里”,但这并没有发生。 调用该函数后,打印有效的_字[i]将不打印任何内容。 如果有人能帮助我,我会非常感激的,而且我非常愿意接受任何批评。您可以在这里找到完整的实现
谢谢。

为什么它不起作用的答案是-

valid_words[word_count] = iline;
在确保
有效单词
中的元素最多可容纳
MAXSIZE
个字符后,应使用
strcpy
,或者在确保第一个(真正的第零个)字符后使用
strncpy
(注意:不是
strncpy
)您要插入的
有效单词中的元素中的字符是
'\0'

一些意见:

假设
MAXSIZE
是一个
#define
d常量,这样更好-

char iline[MAXSIZE]; 
char dline[MAXSIZE;
而不是您所拥有的malloc调用(顺便说一句,sizeof(char)定义为一个)

同样,最好将
CheckFile
的最后一个参数更改为
char valid_words[][MAXSIZE]
(从而更改对
CheckFile
的所有调用中的参数)


希望这有帮助。

为什么它不起作用的答案是-

valid_words[word_count] = iline;
在确保
有效单词
中的元素最多可容纳
MAXSIZE
个字符后,应使用
strcpy
,或者在确保第一个(真正的第零个)字符后使用
strncpy
(注意:不是
strncpy
)您要插入的
有效单词中的元素中的字符是
'\0'

一些意见:

假设
MAXSIZE
是一个
#define
d常量,这样更好-

char iline[MAXSIZE]; 
char dline[MAXSIZE;
而不是您所拥有的malloc调用(顺便说一句,sizeof(char)定义为一个)

同样,最好将
CheckFile
的最后一个参数更改为
char valid_words[][MAXSIZE]
(从而更改对
CheckFile
的所有调用中的参数)


希望这有帮助。

这看起来不那么热:
iline的大小
。你想让它变成指针的大小吗?这同样适用于
dline
@WhozCraig我希望iline和dline指向一个包含六个字符的字符串,现在MAXSIZE被定义为六个字符。因此,如果我的思维过程是正确的,我应该为iline和dline保留六个字节;不是它所指的大小。同样,对于数据线的大小
。顺便问一下,字典文本文件的格式是什么,是否只是空格分隔的单词(空格是空格、制表符、换行符等)?我这样问是因为我不相信你的过滤过程会做你认为应该做的事情。嗯。。好的,我将进一步研究sizeof指针,您指的是char-iline=malloc(maxsizesof(char));正确的?此外,我的输入文件和字典文件每行都有一个单词,后跟一个换行符。Ok。这有点重要(关于文件格式的信息)。是的,我指的是动态分配线。还有很多其他的问题我正在打字。这可能需要一些时间,但您提供的指向完整源代码的链接帮助很大。你对如何解决这个问题有正确的想法,只是把它全部搞错了,对指针和变量大小可能会有误解。让我做一会儿。希望你有时间。这看起来不那么热:
sizeof iline
。你想让它变成指针的大小吗?这同样适用于
dline
@WhozCraig我希望iline和dline指向一个包含六个字符的字符串,现在MAXSIZE被定义为六个字符。因此,如果我的思维过程是正确的,我应该为iline和dline保留六个字节;不是它所指的大小。同样,对于数据线的大小
。顺便问一下,字典文本文件的格式是什么,是否只是空格分隔的单词(空格是空格、制表符、换行符等)?我这样问是因为我不相信你的过滤过程会做你认为应该做的事情。嗯。。好的,我将进一步研究sizeof指针,您指的是char-iline=malloc(maxsizesof(char));正确的?此外,我的输入文件和字典文件每行都有一个单词,后跟一个换行符。Ok。这有点重要(关于文件格式的信息)。是的,我指的是动态分配线。还有很多其他的问题我正在打字。这可能需要一些时间,但您提供的指向完整源代码的链接帮助很大。你对如何解决这个问题有正确的想法,只是把它全部搞错了,对指针和变量大小可能会有误解。让我做一会儿。希望你有一些时间。我想你是说“那么你的
malloc()
free()
调用可以被消除。我是说将它们声明为char数组比[OP]的malloc调用要好。我想你是说“那么
malloc()
free()
可以消除您的调用。我的意思是,将它们声明为char数组比[OP]的malloc调用要好。