无法将字符串保存为指向数组的指针



我试图将某些单词保存到指向数组(**valid_words)的指针中,但我遇到了一个我不理解的问题。下面是我试图利用的函数,最终结果是valid_words包含所有有效单词,根据条件,当line和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, "%sn",iline);
                    valid_words[word_count] = iline;
                    printf("Word Count: %dn", word_count);
                    printf("At Zero: %sn", valid_words[0]);
                    printf("Valid Word: %sn", valid_words[word_count]);
                    printf("Actual Word: %sn", iline);
                    word_count++;
                }   
            }   
            rewind(dictionary);
        }   
        fclose(input);
        fclose(dictionary);
        fclose(output);
        free(iline);
        free(dline);
    }   
    else
    {   
        printf("An error has occuredn");
    }   
}

我得到的当前输出是

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

我期望At Zero:总是输出"英里",但这并没有发生。调用函数之后,打印valid_words[i]不会输出任何内容。如果有人能帮助我,我将非常感激,我对任何批评都持开放态度。您可以在http://pastebin.com/TjxLRVaC找到完整的实现谢谢你。

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

valid_words[word_count] = iline;

您应该在确保valid_words中的元素最多可以容纳MAXSIZE字符后使用strcpy,或者在确保要插入的valid_words中的元素中的第一个(实际上是第零个)字符是''后使用strncat (NB:不是strncpy )。

一些观察:

假设MAXSIZE#define d常数,这是更好的-

char iline[MAXSIZE]; 
char dline[MAXSIZE;
(顺便说一下,sizeof(char)在定义上是1)

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

相关内容

  • 没有找到相关文章

最新更新