我写了下面的代码来从终端窗口读取一行,问题是代码陷入无限循环.行/句子的长度是未定义的,因此我计划将其分成几部分读入缓冲区,然后将其连接到另一个字符串,该字符串可以通过realloc相应的方式进行扩展.有人可以发现我的错误或建议更好的方法来实现这个目标吗?
#include <stdio.h>
#include <string.h>
#define BUFFERSIZE 10
int main (int argc, char *argv[])
{
char buffer[BUFFERSIZE];
printf("Enter a message: \n");
while(fgets(buffer, BUFFERSIZE , stdin) != NULL)
{
printf("%s\n", buffer);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 以下代码示例中是否存在内存泄漏,因为我已在堆上为已释放的名称分配了内存?如果我添加免费(person-> name); 在免费(人)之前; 然后我在VS中得到一个运行时错误"CRT检测到应用程序在堆缓冲区结束后写入内存".
header.h:
#ifndef HEADER
#define HEADER
typedef struct person {
char *name;
} Person;
#endif
Run Code Online (Sandbox Code Playgroud)
由source.c:
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
#define BUFFERSIZE 500
int main (int argc, char* argv[]){
Person *person = NULL;
char buffer[BUFFERSIZE];
printf("Enter name\n");
fgets(buffer, BUFFERSIZE, stdin);
{
char *name;
person = malloc(sizeof(Person));
name = malloc(strlen(buffer));
strcpy (name,buffer);
person->name = name;
}
free(person);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
谢谢,罗布