我正在尝试将整个文本文件读入C中的字符串数组。这是我到目前为止所拥有的:
#include <stdio.h>
#include <time.h>
int main(){
FILE *fp;
long lSize;
char *buffer;
size_t result;
int array_val;
char random_word[100];
//open fle
fp = fopen("dictionary.txt", "rb");
//get file size
fseek (fp, 0, SEEK_END);
lSize = ftell(fp);
rewind(fp);
//allocate RAM for file
buffer = (char *) malloc (sizeof(char)*lSize);
//put file in buffer
result = fread (buffer, 1, lSize, fp);
srand(time(NULL));
array_val = rand()%lSize + 1;
random_word = result[array_val];
return 0;
}
然而,当我构建时,它不起作用(duh)并且我得到这些错误:
subscripted value is neither array nor vector: line 36
和
warning: incompatible implicit declaration of built in function 'malloc'
全部谢谢!
答案 0 :(得分:3)
result[array_val]
应该是buffer[array_val]
,但请注意,这只会指向随机字符,而不是随机字。此外,您将无法将结果分配给random_word
,因为类型不兼容(您无法分配给数组)。您可以使用memcpy
或strcpy
将字符串复制到数组中,但要小心它,覆盖您不拥有的内存会导致一些奇怪且不可预测的行为。
如果文件中的所有字词都以'\n'
个字符分隔,那么作为提示,您可以执行以下操作:
buffer
'\n'
或缓冲区的第一个字符(以先到者为准),你现在有一个指向随机字的第一个字符的指针,'\n'
或缓冲区的末尾(以先到者为准),你现在有一个指向同一个单词的最后一个字符的指针。random_word
醇>
您需要添加<stdlib.h>
才能使用malloc
。
答案 1 :(得分:1)
random_word = result[array_val];
result
是size_t
,这意味着您无法对其应用索引语法。
答案 2 :(得分:1)
这是一个malloc()示例:http://msdn.microsoft.com/en-us/library/6ewkz86d%28v=VS.71%29.aspx
首先我想: 1.你使用malloc();不需要使用数组就可以调用malloc();
答案 3 :(得分:0)
要包含malloc()
的正确实施,您需要#include <stdlib.h>
。
您从行#36
收到的错误很可能是因为您计算随机字的位置的方式,这是不可靠的。
答案 4 :(得分:0)
random_word = result[array_val];
random_word
是一个数组。无法在C中分配数组。
答案 5 :(得分:0)
您已将result
定义为size_t
,您无法通过索引在该代码中实现。
答案 6 :(得分:0)
result
不是数组,它只是size_t
类型的变量。 random
是数组的标题,因此无法更改。