0

printf ステートメント内の挿入関数内でセグメンテーション違反が発生します

#include <stdio.h>
#include <stdlib.h>
void Insert(char w[])
{
int j;
int n=5;
printf("word is %s AFTER\n", w);
}


int main(int argc, char *argv[])
{
        FILE *fp;
        if (argc !=2)
                fp=fopen("words.txt", "r");
        else
                fp=fopen(argv[1], "r");
        char line[28];
        while(!feof(fp)){
                fgets(line, 256, fp);
                Insert(line);
        }
}

word.txt では、各行の単なる単語の集まりです。

apple
banana
...
zoo

(...間にある単語の束を意味するだけです)これを出力します:

word is apple
AFTER
word is banana
AFTER
...(a bunch more repetitions)                                    
word is cookie
Segmentation Fault(core dumped)

セグメンテーション違反が発生するのはなぜですか? それは単語を完全に印刷しました。そして、それは印刷しませんでしたAFTER

ありがとう。

4

1 に答える 1

1

割り当てられたメモリは28バイトのみで、256バイトをコピーしようとしています。

char line[28]; <-- 28 bytes only allocated to line.
        while(!feof(fp)){
                fgets(line, 256, fp); <-- 256 bytes read into line.

lineこの問題を回避するには、メモリを増やしてください。

于 2012-12-03T07:08:58.413 に答える