-1

我很难使用mallocfscanf。我只想读取一个文件并使用执行此代码时出现分段错误错误来打印结果。我不确定我做错了什么。如果有人指出解决方法,我将不胜感激。这是我的代码:

#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)

设置 bufferNULL. 我相信你可以看到接下来会发生什么。

更一般地说,这段代码试图做几件事,而且充满了错误。您应该已经分别测试了不同的功能并在此过程中解决了这些错误。

于 2012-11-04T15:34:31.343 回答
1

这似乎是错误的:

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

命令行参数是一个字符串,但您需要一个数字。您必须先将字符串转换为数字。

另一个问题:在你的循环中 n 永远不会增加,这就是为什么只写入缓冲区的第一个字节。

于 2012-11-04T15:32:25.103 回答
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 回答