2
#include <stdio.h>
#include <stdlib.h>

int main() 
{
     FILE *fp = fopen("lr.txt", "r");
     fseek(fp, 0L, SEEK_END);
     int size = ftell(fp);
     fseek(fp, 0L, SEEK_SET);

     char *lorem_ipsum;

     int i = 0;
     lorem_ipsum = (char*) malloc(sizeof(char) * size);
     while(fscanf(fp, "%s\n", lorem_ipsum) != EOF)
     {
      printf("%s", lorem_ipsum[i]);
      i++;

     }
     fclose(fp);
     return 0;
}

このプログラムはコンパイルされて実行されましたが、何が起こったのかというと、セグメンテーション違反が発生し、このプログラムの何が問題になっているのか正確にはわかりません。誰かが私が得たポインタエラーで私を助けることができますか?

4

3 に答える 3

6

文字列のように印刷しようとしてlorem_ipsum[i]います。lorem_ipsumは文字列なので、lorem_ipsum[i]単なる文字です。

segfaultが発生するのは、printfがで文字の値を調べ、lorem_ipsum[i]それをchar *ポインタ(文字列)として解釈するためです。当然、文字の値は、割り当てられた有効なメモリアドレスに対応していません。

于 2009-03-20T01:46:08.053 に答える
3

char( lorem_ipsum[i]) を引数としてfscanf期待する関数に渡しています。char*

本当に最初の文字を削除したい場合はlorem_ipsum、 orを使用することをお勧めします。lorem_ipsum+ii

于 2009-03-20T01:48:42.917 に答える
0

for ループで何をしようとしているのか説明できますか?

ファイルを1行ずつ読み取ってから、その行を印刷しようとしているようです。ただし、printf("%s", lorem_ipsum[i]) を実行すると、文字列ではなく文字が送信されます。

于 2009-03-20T01:49:27.860 に答える