我不断遇到这段代码的分割错误,我试图打印字典的前 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);
}