-1

mallocと の使用が困難fscanfです。このコードを実行したときにセグメンテーション違反エラーが発生したことを使用して、ファイルを読み取って結果を出力したいだけです。何を間違えたのかわかりません。誰かが修正を指摘してくれたら、とてもありがたいです。これが私のコードです:

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

int main(int argc, char* argv[]){
    char* buffer = (char*)malloc(*argv[1]); // Allocate memory 
    if(buffer=NULL) // if *argv[1] is not existed, exit the program    
        exit(1);

    int n = 0;
    FILE* fp=fopen("file.txt","r"); // Open the file
    do {
        buffer[n] =fscanf(fp,"%c",buffer); // read from file until it gets EOF
    } while(buffer[n] != EOF);
    fclose(fp); // Close the file

    printf("%s",buffer); // Print the stored string

    free(buffer); // Return the memory
    return 0;    
}
4

3 に答える 3

2

とった。これ:

if(buffer=NULL)

これである必要があります:

if(buffer==NULL)

に設定 bufferしていますNULL。次に何が起こるかを確認できると確信しています。

より一般的に言えば、このコードはいくつかのことを試みており、バグでいっぱいです。さまざまな機能を個別にテストし、途中でそれらのバグを解決する必要がありました。

于 2012-11-04T15:34:31.343 に答える
1

修正されたコードとコメントをインラインで見つけてください。

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

int main(int argc, char* argv[])
{
  // Add the check if *argv[1] does not exist, exit the program    
  long mem_sz=strtol(argv[1],NULL,10);//Safer to atoi
  char* buffer = (char*)malloc(mem_sz); // properly allocate memory 

  //You missed the == in the NULL check.
  if(buffer==NULL) 
   exit(1);

  int n = 0; 
  FILE* fp=fopen("file.txt","r"); // Open the file
  if (fp == NULL)//Check fp too
   exit(1);

  do 
  { 
    buffer[n++]=fscanf(fp,"%c",buffer);
  } // read from file until it gets EOF and n++
  while(buffer[n-1] != EOF);//Check the last read character

  buffer[n]=0;//Put an end of string, so that printf later will work correct

  fclose(fp); // Close the file
  printf("%s\n",buffer); // Print the stored string
  free(buffer); // Return the memory
  return 0;    
}
于 2012-11-04T15:47:48.573 に答える
1

これは間違っているようです:

   char* buffer = (char*)malloc(*argv[1]);

コマンド ライン引数は文字列ですが、数値が必要です。最初に文字列を数値に変換する必要があります。

別の問題: ループでは n が増加しないため、バッファの最初のバイトのみが書き込まれます。

于 2012-11-04T15:32:25.103 に答える