谁能告诉我这段代码有什么问题?我有一个隔离故障。我正在尝试将文件的第一行读取到新创建的文件中。
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_array
或buffer_ptr
传递给fgets()
和fwrite()
但是所有动态分配的内存必须按如下方式进行free()
'ed。
free(buffer_ptr);