较小的fopen/fwrite问题.请建议

  • 本文关键字:问题 fwrite fopen c
  • 更新时间 :
  • 英文 :


谁能告诉我这段代码有什么问题?我有一个隔离故障。我正在尝试将文件的第一行读取到新创建的文件中。

char *buffer;
int main(int argc, char *argv[])
{
  FILE *source = fopen(argv[0], "r");
  FILE *destination = fopen("destination", "w");
  fgets(buffer, 500, source);
  fwrite(buffer, 1, sizeof(buffer), destination);
}

您没有为buffer分配任何内容。

改变:

char *buffer;

char buffer[500];

在你的代码中,buffer只是一个未初始化的指针。试图解引用它将导致未定义的行为。


或者,您可以动态地为buffer分配内存:

buffer = (char*)malloc(500 * sizeof(char));

但是你应该记得稍后释放内存:

free(buffer);
如果使用后一种方法,代码将看起来像这样:
char *buffer;
int main(int argc, char *argv[])
{
  FILE *source = fopen(argv[0], "r");
  FILE *destination = fopen("destination", "w");
  //  Allocate
  buffer = (char*)malloc(500 * sizeof(char));
  fgets(buffer, 500, source);
  fwrite(buffer, 1, 500 * sizeof(char), destination); //  Fixed here
  //  Free memory
  free(buffer);
  //  Don't forget return value
  return 0;
}

缓冲区没有大小-它是一个指向char数组的指针。您需要占用一些空间来读取

应该分配内存来存储数据。它可以使用arrays静态分配,也可以使用malloc()动态分配。

#define BUFLEN 50
/* static allocation */    
char buffer_array[BUFLEN];
/* dynamic allocation */
char * buffer_ptr = NULL;
if ((buffer_ptr = (char *)malloc((int)sizeof(char) * BUFLEN)) == NULL) {
    printf("ERROR: unable to allocate memory n");
    return 0;
}

这里你可以将buffer_arraybuffer_ptr传递给fgets()fwrite()

但是所有动态分配的内存必须按如下方式进行free() 'ed。

free(buffer_ptr);

最新更新