C语言 Fscanf Seg Fault



我不断遇到这段代码的分割错误,我试图打印字典的前 6 个单词。我很确定我错误地使用了 fscanf,但我不确定如何/为什么......

#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdio.h>
int main(int argc, char* enc[])
{
    if (argc != 2)
    {  
        printf("Improper command-line argumentsn");
        return 1;
    }
    FILE *Dict;
    Dict = fopen("/usr/share/dict/words", "r");
    if (Dict == NULL)
    {
        printf("Could not open dictionary");
        exit(1);
    }
    char* full = enc[1];
    char* salt[2];
    for (int i=0; i<2; i++)
    {
        salt[i] = &full[i];
    }
    char* key[50];
    for (int i=0; i<6; i++)
    {
        fscanf(Dict, "%s", *key);
        printf("%s", *key);
    }   
}

C 字符串要么是字符数组:char name[10],要么是指向字符的指针(指向有效的内存范围):char* name

您在这里拥有的是一个包含 50 个指向字符(或字符串)的指针的数组:

char* key[50];
for (int i=0; i<6; i++)
{
    fscanf(Dict, "%s", *key);
    printf("%s", *key);
}  

key 可能旨在成为 50 个字符的 C 字符串缓冲区:

char key[50];
for (int i=0; i<6; i++)
{
    fscanf(Dict, "%s", key);
    printf("%s", key);
}  

相关内容

  • 没有找到相关文章

最新更新