为什么固定数组有效但是当我尝试使用malloc使其动态化时会产生分段错误?除了* 10之外,我还尝试过各种各样的价值观。这只是使用一个小文件。我需要这个来处理一个90,000字的字典。
FILE *fp;
long lSize;
//char buffer[100];
char *buffer=malloc(sizeof(char)*10);
int i = 0;
fp = fopen ( "cats.txt" , "rb" );
if( !fp ) perror("cats.txt"),exit(1);
wordTree = makeEmptyTree();
while( fscanf(fp, "%s", &buffer) != EOF )
{
addStringToTree(wordTree, buffer);
//printf("%s\n", words[i]);
}
fclose(fp);
//free(buffer);
如果需要,我也可以包含addStringToTree。
谢谢你修复它的人。不幸的是,我无法获得90,000字的文本文件,仍然会出现seg错误。
答案 0 :(得分:1)
应该是
fscanf(fp, "%s", buffer) //remove the ampersand
答案 1 :(得分:0)
更改
char *buffer=malloc(sizeof(char)*10);
到
char *buffer=malloc(100);
和
while( fscanf(fp, "%s", &buffer) != EOF )
到
while( fscanf(fp, "%s", buffer) != EOF )
然后再试一次。
sizeof(char)
始终返回1,buffer
的大小应为100(因为在静态情况下为100); buffer
已经指向char
,&
之前没有必要,并且会给出指针的地址而不是buffer
指向的地址。 (这可能是段故障的原因。)答案 2 :(得分:0)
您正在fscanf中传递指向指针的指针。只需在fscanf中有缓冲区。在'char buffer []'的情况下,&缓冲区和缓冲区是等价的。因此在这种情况下没有seg-fault。
答案 3 :(得分:0)
请注意,固定数组和动态分配数组的类型不同:
char buffer[100];
VS
char* buffer
Malloc会返回您动态分配的内存的地址位置,因此您无需在其前面添加'&'。所以只需使用它:
while( fscanf(fp, "%s", buffer) != EOF )
{
.....