小fopen/fwrite问题.建议请

mat*_*cks 2 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);

}
Run Code Online (Sandbox Code Playgroud)

Mys*_*ial 6

你还没有分配任何东西buffer.

更改:

char *buffer;
Run Code Online (Sandbox Code Playgroud)

char buffer[500];
Run Code Online (Sandbox Code Playgroud)

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


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

buffer = (char*)malloc(500 * sizeof(char));
Run Code Online (Sandbox Code Playgroud)

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

free(buffer);
Run Code Online (Sandbox Code Playgroud)

如果你使用后一种方法,代码将如下所示:

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;
}
Run Code Online (Sandbox Code Playgroud)