有谁能告诉我这段代码有什么问题?我遇到了一个段错误。我正在尝试将文件的第一行读入新创建的文件中。
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);
}
答案 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_array
或buffer_ptr
传递给fgets()
和fwrite()
但所有动态分配的内存必须为free()
,如下所示。
free(buffer_ptr);