小fopen / fwrite问题。建议请

时间:2011-12-31 01:55:20

标签: 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);

}

3 个答案:

答案 0 :(得分:6)

您尚未为buffer分配任何内容。

变化:

char *buffer;

char buffer[500];

由于您的代码现在正确,buffer只是一个未初始化的指针。试图取消引用它将导致未定义的行为。 (在你的情况下是seg-fault)


或者,您可以为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;
}

答案 1 :(得分:4)

你的缓冲区没有大小 - 它是一个指向char数组的指针。你需要malloc一些空间来读入

答案 2 :(得分:0)

您应该分配内存来存储数据。它可以使用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(),如下所示。

free(buffer_ptr);
相关问题